在 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

更新於: 2019年10月15日

7K+ 瀏覽量

啟動您的 職業生涯

透過完成課程獲得認證

開始學習
廣告