在Java中,final
?關鍵字用于表示不可變性,具體作用取決于它修飾的目標(變量、方法或類)。以下是其核心作用:
1.?修飾變量(常量)
-
基本類型變量:值不可更改(常量)。
final int MAX_VALUE = 100; // MAX_VALUE = 200; // 編譯錯誤,不能重新賦值
-
引用類型變量:引用地址不可更改(但對象內部狀態可能可變)。
final List<String> list = new ArrayList<>(); list.add("Hello"); // 允許修改對象內容 // list = new ArrayList<>(); // 編譯錯誤,不能重新賦值引用
-
注意:必須在聲明時或構造方法/代碼塊中初始化。
2.?修飾方法
-
禁止子類重寫:父類中的?
final
?方法不能被子類覆蓋。class Parent {final void show() { System.out.println("不可重寫"); } } class Child extends Parent {// void show() { } // 編譯錯誤,不能重寫final方法 }
3.?修飾類
-
禁止繼承:
final
?類不能被其他類繼承(如?String
、Integer
?等)。final class ImmutableClass { } // class SubClass extends ImmutableClass { } // 編譯錯誤
4.?其他場景
-
方法參數:參數在方法內不能被重新賦值(僅限引用地址)。
void process(final int x) {// x = 10; // 編譯錯誤 }
-
線程安全:
final
?變量的初始化保證對其他線程可見(無需同步)。
關鍵區別總結
修飾目標 | 作用 |
---|---|
變量 | 值/引用不可變 |
方法 | 不可重寫 |
類 | 不可繼承 |
設計意義
-
清晰性:明確標識不可變的設計意圖。
-
安全性:防止意外修改(如常量、核心類庫)。
-
性能優化:JVM可能對?
final
?進行優化(如內聯)。
通過合理使用?final
,可以提升代碼的健壯性和可維護性。