為 Java 中的靜態 final 變數分配值\n


在 Java 中,非靜態 final 變數可以在兩個地方賦值。

  • 宣告時。

  • 在建構函式中。

示例

即時演示

public class Tester {
   final int A;
   //Scenario 1: assignment at time of declaration
   final int B = 2;

   public Tester() {
      //Scenario 2: assignment in constructor
      A = 1;
   }

   public void display() {
      System.out.println(A + ", " + B);
   }

   public static void main(String[] args) {        
      Tester tester = new Tester();
      tester.display();
   }
}

輸出

1, 2

但是在靜態 final 的情況下,變數不能在建構函式中賦值。編譯器會丟擲一個編譯錯誤。靜態 final 變數需要在靜態程式碼塊或宣告時賦值。所以靜態 final 變數可以在以下兩個地方賦值。

  • 宣告時。

  • 在靜態程式碼塊中。

示例

即時演示

public class Tester {
   final int A;
   //Scenario 1: assignment at time of declaration
   final int B = 2;

   public Tester() {
      //Scenario 2: assignment in constructor
      A = 1;
   }

   public void display() {
      System.out.println(A + ", " + B);
   }

   public static void main(String[] args) {        
      Tester tester = new Tester();
      tester.display();
   }
}

輸出

1, 2

靜態 final 變數有此行為的原因很簡單。靜態 final 在所有物件之間共享,如果允許在建構函式中賦值,那麼在建立物件時,此變數將按物件進行更改,因此不會一次性賦值。

更新於: 2020 年 6 月 18 日

804 次訪問

開啟您的 職業

完成本課程,獲得認證

開始
廣告