Java 程式設計/關鍵字/final
外觀
final 是一個關鍵字。注意!它的含義取決於它用於類、方法還是變數。它必須放在變數型別或方法返回型別之前。建議將其放在訪問修飾符之後以及static 關鍵字之後。
程式碼部分 1:關鍵字順序。
private static final long serialVersionUID = -5437975414336623381L;
|
final 關鍵字只允許對變數進行一次賦值。也就是說,一旦變數被賦值,它的值就變成了只讀。如果變數是基本型別,它的值將不再改變。如果它是一個物件,只有它的引用將不再改變。請記住,它的值仍然可以改變。
程式碼部分 2:禁止雙重賦值。
final int a = 1;
a = 2;
|
|
|
一個 final 變數經常被用於通用常量,例如 pi
程式碼部分 4:Pi 常量。
static final double PI = 3.1415926;
|
final 關鍵字也可以用於方法引數
程式碼部分 5:final 方法引數。
public int method(final int inputInteger) {
int outputInteger = inputInteger + 1;
return outputInteger;
}
|
它對於使用副作用更新某些物件的方法很有用。此類方法修改了作為引數傳遞的物件的內容。方法呼叫者將收到物件更新。如果物件引數在方法中被重新賦值,這將失敗。將更新另一個物件而不是。final 方法引數也可以用於保持程式碼整潔。
final 關鍵字類似於其他語言中的const 關鍵字和 C# 中的readonly 關鍵字。final 變數不能是volatile。
final 關鍵字禁止建立子類。這是 Integer 或 String 類的案例。
程式碼清單 1:SealedClass.java
public final class SealedClass {
public static void main(String[] args) {
}
}
|
final 類不能是abstract。final 關鍵字類似於 C# 中的sealed 關鍵字。
final 關鍵字禁止在子類中覆蓋方法。如果類已經是 final,並且私有方法隱式地是final,那麼它就毫無用處。final 方法不能是abstract。
程式碼清單 2:NoOverwriting.java
public class NoOverwriting {
public final void sealedMethod() {
}
}
|
final 關鍵字主要用於保證程式碼的良好使用。例如(非static)方法,這允許編譯器擴充套件方法(類似於行內函數),如果方法足夠小。有時需要使用它。例如,巢狀類只能訪問頂層類的成員,如果它們是 final。
- 另見 訪問修飾符。