在 Java 中,我們可以在預設建構函式中初始化靜態變數嗎?
類/靜態變數屬於類,就像例項變數一樣,它們在類中宣告,在任何方法之外,但使用 static 關鍵字。
它們在編譯時可用,您可以在例項化類之前/無需例項化類即可訪問它們,在整個類中只有一個靜態欄位的副本可用,即所有物件中靜態欄位的值都相同。您可以使用 static 關鍵字定義靜態欄位。
如果您在類中宣告一個靜態變數,如果您沒有初始化它,就像例項變數一樣,編譯器在預設建構函式中使用預設值初始化這些變數。
是的,您也可以使用建構函式初始化這些值。
示例
public class DefaultExample { static String name; static int age; DefaultExample() { name = "Krishna"; age = 25; } public static void main(String args[]) { new DefaultExample(); System.out.println(DefaultExample.name); System.out.println(DefaultExample.age); } }
輸出
Krishna 25
宣告 final 和 static
但是,如果您宣告一個例項變數為 static 和 final,Java 編譯器將不會在預設建構函式中初始化它,因此,必須初始化 static 和 final 變數。如果不這樣做,會生成編譯時錯誤。
示例
public class DefaultExample { static final String name; static final int age; public static void main(String args[]) { new DefaultExample(); System.out.println(DefaultExample.name); System.out.println(DefaultExample.age); } }
編譯時錯誤
DefaultExample.java:2: error: variable name not initialized in the default constructor static final String name; ^ DefaultExample.java:3: error: variable age not initialized in the default constructor static final int age; ^ 2 errors
但是,如果您嘗試初始化一個宣告為 **final** 和 **static** 的變數,編譯器會將其視為初始化變數的嘗試,並會生成編譯時錯誤。
示例
public class DefaultExample { static final String name; static final int age; DefaultExample() { name = "Krishna"; age = 25; } public static void main(String args[]) { new DefaultExample(); System.out.println(DefaultExample.name); System.out.println(DefaultExample.age); } }
編譯時錯誤
OutputDeviceAssignedDefaultExample.java:5: error: cannot assign a value to final variable name name = "Krishna"; ^ DefaultExample.java:6: error: cannot assign a value to final variable age age = 25; ^ 2 errors
廣告