Java final關鍵字


final關鍵字不允許修改或替換其原始值或定義。final關鍵字可以在以下三個上下文中使用:

  • 變數宣告
  • 類宣告
  • 方法宣告

final變數

如果一個變數被宣告為final,它只能被賦值一次。final變數的值在設定後不能修改。變數宣告包括區域性變數的宣告,方法/建構函式的形式引數,範例變數和類變數。要將變數宣告為final,請在變數宣告中使用final關鍵字。

final int YES  = 1;

final變數的值只設定一次,它不能被重新賦值。有兩種方法來初始化final變數的值:

  • 在宣告時給予初始化。
  • 將其初始化延遲到稍後的時間。

但是,必須要在第一次讀取 final 變數之前初始化它。

  • final區域性變數 - 可以宣告一個區域性變數為final。如果將區域性變數宣告為空的final變數,則必須在使用前初始化它。
  • final引數 - 可以宣告一個引數final。 當呼叫方法或建構函式時,引數將使用實際引數的值自動初始化。因此,不能在方法或建構函式主體內更改final引數的值。

  • final範例變數 - 可以宣告一個範例變數final和空的final。空的final範例變數必須初始化一次,並且只有在呼叫類的任何建構函式時才初始化一次。

  • final類變數 - 可以宣告一個類變數final和空的final。必須在其中一個靜態初始化器中初始化一個空的最終類變數。

  • final參考變數 - 參照變數儲存物件的參照。final參照變數意味著,一旦參照一個物件(或null),它就不能被修改以參照另一個物件。

以下程式碼顯示了test2()方法的最終形式引數x:

public void  test2(final int x)  {

如果有一個類的多個靜態初始化器,必須在一個靜態初始化器中初始化所有空的final類變數一次。

public class Main {
  public static final int YES = 1;
  public static final int NO = 2;
  public static final String MSG;

  static {
    MSG = "final static variable";
  }
}

final類

如果一個類被宣告為final,它不能被擴充套件(或子類化)。

final方法

如果一個方法宣告為final,它不能在包含該方法的類的子類中重新定義(覆蓋或隱藏)。