| 類型 | 聲明位置 | 存儲區 | 預設值 | 生命週期 |
| 成員變量(實例變量) | 類中、方法外 | 堆(Heap) | 有(0/null/false) | 隨對象創建/銷毀 |
| 靜態變量(類變量) | 類中、方法外,static | 方法區(Metaspace) | 有 | 隨類加載/卸載 |
| 局部變量 | 方法內、代碼塊內 | 棧(Stack) | 無(必須顯式初始化) | 隨方法/塊進出棧 |
2. 作用域規則
- 成員變量:全類可見(受
private/protected/public 修飾符限制)。
- 靜態變量:類名.變量名 直接訪問,亦可對象訪問(不推薦)。
- 局部變量:從聲明處開始到所在塊
} 結束。不能在同一塊重複聲明同名變量,但可在嵌套塊中遮蔽外層同名變量。
public void demo() {
int x = 1;
if (true) {
// int x = 2; // 編譯錯誤:同一塊重複聲明
int y = x + 1; // 可見外層 x
}
// y 不可見
}
3. 命名規範(阿里巴巴 Java 開發手冊精簡版)
- 包名:全小寫,多級用點分隔,如
com.company.module。
- 類/介面名:UpperCamelCase,名詞,如
UserService。
- 方法/變量名:lowerCamelCase,動詞/名詞,如
getUserName、maxCount。
- 常量:全大寫下劃線分隔,如
MAX_THREAD_COUNT。
- 禁用:拼音、單字母(除循環計數器)、保留字、
_ / $ 開頭。
4. 常見陷阱與最佳實踐
4.1 循環變量作用域最小化
// 推薦:i 僅在循環可見
for (int i = 0; i < 10; i++) { ... }
// 避免:i 洩漏到外層
int i;
for (i = 0; i < 10; i++) { ... }
4.2 避免長生命週期持有大對象
靜態集合、單例 Map 若不清理,易導致記憶體洩漏。使用 WeakHashMap 或定時清理策略。
4.3 線程安全:局部變量天生線程安全
每個線程擁有獨立棧幀,局部變量無共享問題。成員變量需配合 ThreadLocal、synchronized、AtomicXXX 或不可變模式。
4.4 變量遮蔽
class Parent { String name = "Parent"; }
class Child extends Parent { String name = "Child"; }
Child c = new Child();
System.out.println(c.name); // "Child"
System.out.println(((Parent)c).name); // "Parent"
盡量避免父子類同名欄位,造成閱讀困惑。
5. 總結
變量是程序狀態的載體,理解其存儲位置決定生命週期,作用域決定可見性,命名規範決定可維護性,是寫出高質量 Java 代碼的基石。下一篇將進入「運算符與流程控制」篇。
- 上一篇文章: 程序員六大基本素質:團隊協作、文檔習慣、代碼規範、測試意識、持續學習、好奇心驅動
- 下一篇文章: Spring Boot 搭建 Web 項目實戰:Maven 配置、啟動類、YAML 配置、Velocity 模板、打包部署
Copyright ©
程式碼之家 All Rights Reserved