在 Java 程式設計中,final 是一個極為重要的關鍵字,它可以修飾變數、方法與類別,分別代表「不可變更的引用」、「不可被覆寫的方法」與「不可被繼承的類別」。善用 final 不僅能增強程式碼的安全性,還能協助 JVM 進行優化。本文將從變數、方法、類別三個層面,系統性地剖析 final 的核心規則與最佳實踐。
被 final 修飾的變數(包含成員變數與區域變數)稱為 final 變數。其核心規則如下:
final(或實際上不再變更的 effectively final)。final int CONST_VALUE = 1;
// CONST_VALUE = 2; // 編譯錯誤:The final local variable CONST_VALUE cannot be assigned
在方法宣告上加上 final,表示該方法不可被子類別覆寫。適用場景:
public class Person {
public final void printName() {
System.out.println("Wang Zhengyi");
}
}
被 final 修飾的類別稱為 final 類別,不可被繼承。Java 標準庫中 String、Integer 等皆為 final 類。final 類別天然具備執行緒安全優勢,構建不可變類別需遵循以下步驟:
final。private final。以下示範一個不可變類別的完整實作:
import java.util.HashMap;
import java.util.Map;
public final class ImmutableExample {
private final int id;
private final String name;
private final Map<Integer, String> dataMap;
public ImmutableExample(int id, String name, Map<Integer, String> map) {
this.id = id;
this.name = name;
// 深層複製
Map<Integer, String> copy = new HashMap<>();
for (Map.Entry<Integer, String> entry : map.entrySet()) {
copy.put(entry.getKey(), entry.getValue());
}
this.dataMap = copy;
}
public int getId() { return id; }
public String getName() { return name; }
// 回傳複製品,防止外部修改內部狀態
public Map<Integer, String> getDataMap() {
return new HashMap<>(dataMap);
}
}
掌握 final 的正確用法,是編寫健壯、高效 Java 程式碼的基礎功夫之一。