為 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 在所有物件之間共享,如果允許在建構函式中賦值,那麼在建立物件時,此變數將按物件進行更改,因此不會一次性賦值。
廣告