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
,它不能在包含該方法的類的子類中重新定義(覆蓋或隱藏)。