final 是 Java 中用於限制可變性的關鍵字,可修飾類、方法、變量(成員變量與局部變量)及方法參數。理解其語義對編寫健壯、可維護的代碼至關重要。
final 修飾的類不能被繼承,即不存在子類。final(因為無法被覆寫)。String、Integer 等包裝類、Math 工具類。final 修飾的方法不能被子類覆寫,但可以被繼承調用。final List list = new ArrayList<>(); list.add("a"); // 合法 聲明時不賦值,但在構造器或初始化塊中必須賦值,編譯器會強制檢查所有路徑均已初始化。適用於構造器參數化初始化的常量。
方法參數聲明為 final 後,方法體內無法修改參數引用(基本類型不可改值,引用類型不可改指向)。常用於匿名內部類捕獲局部變量(Java 8+ 已隱式 final)。
public void method(final int param) {
// param = 10; // 編譯錯誤
}
final,減少可變狀態,降低認知負荷。final、private、無 setter、防禦性拷貝,構建線程安全的不可變類。| 修飾對象 | 核心限制 | 典型場景 |
|---|---|---|
| 類 | 不可繼承 | 工具類、不可變類 |
| 方法 | 不可覆寫 | 模板方法固定步驟、安全敏感邏輯 |
| 成員變量 | 引用/值不可二次賦值 | 常量、依賴注入字段 |
| 局部變量/參數 | 不可二次賦值 | 匿名內部類捕獲、參數保護 |