[修飾符] 類型 變數名 [= 初值]userName)obj.fieldClassName.field[final/default] 類型 變數名 [= 初值]| 維度 | 成員變數 | 區域變數 |
|---|---|---|
| 定義位置 | 類中、方法外 | 方法/構造器/代碼塊/參數列表 |
| 修飾符 | 完整支援 (含 static/final/volatile 等) | 僅 final/default |
| 默認值 | 有 (按類型) | 無 (必須顯式初始化) |
| 記憶體區域 | 堆 (隨對象) / 方法區 (static) | 棧 (棧幀) |
| 生命週期 | 與對象/類同在 | 方法執行期間 |
| 訪問方式 | 對象/類名.變數名 | 直接用變數名 |
區域變數與成員變數同名時,區域變數遮蔽成員變數。需用 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 │ ← 區域變數
└─────────────────┘