宣告變數為靜態(static)和最終(final)時,需要遵循哪些規則?
靜態變數 − 靜態變數也稱為類變數。可以使用關鍵字`static`宣告變數。一旦將變數宣告為靜態,無論建立多少個物件,類中都只有一個副本。
public static int num = 39;
final − 一旦將變數宣告為`final`,就不能重新賦值。當將類的變數宣告為`static`和`final`時,就將其設定為常量。
需要遵循的規則
- 必須初始化 − 在Java中,不必在類中初始化例項變數。如果在編譯時不初始化它們,Java編譯器會在預設建構函式中初始化它們。
但是,如果將例項變數宣告為`static`和`final`,Java編譯器不會在預設建構函式中初始化它,因此必須初始化`static`和`final`變數。如果不初始化,則會生成編譯時錯誤。
示例
class Data{ static final int num; } public class ConstantsExample { public static void main(String args[]) { System.out.println("value of the constant: "+Data.num); } }
編譯時錯誤
ConstantsExample.java:2: error: variable num not initialized in the default constructor static final int num; ^ 1 error
- 只能在靜態塊中初始化 − 當一個變數被宣告為`static`和`final`時,只能在靜態塊中初始化它。如果嘗試在其他地方初始化它,編譯器會認為您試圖重新賦值,並生成編譯時錯誤。
class Data{ static final int num; Data(int i){ num = i; } } public class ConstantsExample { public static void main(String args[]) { System.out.println("value of the constant: "+Data.num); } }
編譯時錯誤
ConstantsExample.java:4: error: cannot assign a value to final variable num num = i; ^ 1 error
要使此程式正常工作,需要在靜態塊中初始化`final static`變數,如下所示:
class Data{ static final int num; static{ num = 1000; } } public class ConstantsExample { public static void main(String args[]) { System.out.println("value of the constant: "+Data.num); } }
輸出
value of the constant: 1000
廣告