類型 變量名 [= 初始值]; // 分號結束,是完整語句
_、$ 開頭,後接字母/數字/_/$。goto、const 等)。camelCase,布爾類型常用 is/has/can 前綴。0/0.0/false/null。| 變量類型 | 聲明位置 | 作用域 | 生命周期 |
|---|---|---|---|
| 局部變量 | 方法/構造器/代碼塊內 | 從聲明處到所在塊 } 結束 | 方法調用棧幀存活期 |
| 參數變量 | 方法簽名 | 整個方法體 | 方法調用期間 |
| 實例字段 | 類內部、方法外 | 整個類(含內部類),private 僅本類 | 對象創建到 GC 回收 |
| 類字段 | static 修飾 | 整個類,public 全項目可見 | 類加載到卸載(應用結束) |
遮蔽規則:局部變量可遮蔽同名字段,用 this.field 訪問字段。
// 編譯期常量(宏替換)
static final int MAX_SIZE = 100;
static final String DEFAULT_NAME = "Unknown";
// 運行期常量(引用不可變,對象內容可能可變)
final List list = new ArrayList<>();
list.add("A"); // 合法:修改對象內容
// list = new ArrayList<>(); // 編譯錯誤:引用不可變
final 修飾基本類型 → 值不可變;修飾引用類型 → 引用不可變(指向對象不可變)。SNAKE_CASE)。static final 基本類型/字面量字符串為編譯期常量,調用處直接內聯,極高性能。Java 8+ Lambda/匿名內部類捕獲局部變量要求 final 或事實上 final(僅賦值一次):
int count = 0;
Runnable r = () -> System.out.println(count); // ok,count 未再賦值
count++; // 編譯錯誤:count 不再是 effectively final
final:參數、局部變量、字段,減少可變狀態,利於線程安全與 JIT 優化。int a=1, b=2; ✗ → 分行 ✓,便於註釋、調試、diff。final 修飾引用,內容仍可修改;需不可變視圖用 Collections.unmodifiableList()、List.copyOf()(Java 10+)。