首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

Java 成員變數與區域變數完整對比:定義位置、作用域、初始化、命名衝突

     編輯:Java 綜合教學

Java 成員變數與區域變數完整對比:定義位置、作用域、初始化、命名衝突

成員變數 (Member Variable / Field)

  • 定義位置:類體中、方法外
  • 語法:[修飾符] 類型 變數名 [= 初值]
  • 修飾符:public/private/protected/default、static、final、transient、volatile
  • 類型:任意基本型別或引用型別
  • 命名:駝峰法、首字母小寫 (如 userName)
  • 默認值:未顯式賦值時自動賦予 (int→0, boolean→false, 引用→null)
  • 訪問:
    • 非靜態:obj.field
    • 靜態:ClassName.field

區域變數 (Local Variable)

  • 定義位置:方法內、構造器內、代碼塊內、方法參數列表
  • 語法:[final/default] 類型 變數名 [= 初值]
  • 修飾符:僅限 final 或 default
  • 類型:任意基本型別或引用型別
  • 命名:同成員變數
  • 初始化:使用前必須顯式初始化,否則編譯錯誤
  • 作用域:從宣告處開始至所在代碼塊結束
  • 生命週期:方法執行時棧幀分配,方法結束銷毀

核心差異對比表

維度成員變數區域變數
定義位置類中、方法外方法/構造器/代碼塊/參數列表
修飾符完整支援 (含 static/final/volatile 等)僅 final/default
默認值有 (按類型)無 (必須顯式初始化)
記憶體區域堆 (隨對象) / 方法區 (static)棧 (棧幀)
生命週期與對象/類同在方法執行期間
訪問方式對象/類名.變數名直接用變數名

命名衝突與 this 關鍵字

區域變數與成員變數同名時,區域變數遮蔽成員變數。需用 this.field 訪問被遮蔽的成員變數。

class Demo {
    int value = 10; // 成員變數
    
    void method(int value) { // 參數 = 區域變數
        System.out.println(value);        // 區域變數
        System.out.println(this.value);   // 成員變數
    }
}

記憶體圖解

堆 (Heap)                    棧 (Stack)
┌─────────────────┐         ┌─────────────────┐
│  Object         │         │  main() 棧幀    │
│  - field: 10    │◄─────── │  - ref: 0x1234  │
└─────────────────┘         │  method() 棧幀  │
                            │  - param: 20    │  ← 區域變數
                            │  - local: 30    │  ← 區域變數
                            └─────────────────┘
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved