為什麼 Java 不允許在建構函式中初始化 static final 變數?


如果你把變數宣告為 static 和 final,並且需要在宣告時或在 static 塊中對其進行初始化。如果你嘗試在建構函式中對其進行初始化,編譯器會認為你正試圖重新分配值,並會生成編譯時錯誤——

示例

 線上演示

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

要使此程式起作用,你需要在靜態塊中初始化最終靜態變數,如下所示:

示例

 線上演示

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

更新於:15-Oct-2019

609 人次瀏覽

開啟你的 職業生涯

完成課程後獲得認證

開始
廣告