Java 中的預設建構函式會初始化靜態變數嗎?


靜態欄位/變數屬於類,它將與類一起載入到記憶體中。無需建立物件即可呼叫它們(使用類名作為引用)。在整個類中只有一個靜態欄位的副本可用,即靜態欄位的值在所有物件中都相同。可以使用 static 關鍵字定義靜態欄位。

示例

public class Sample{
   static int num = 50;
   public void demo(){
      System.out.println("Value of num in the demo method "+ Sample.num);
   }
   public static void main(String args[]){
      System.out.println("Value of num in the main method "+ Sample.num);
      new Sample().demo();
   }
}

輸出

Value of num in the main method 50
Value of num in the demo method 50

靜態變數的初始化

如果在類中聲明瞭一個靜態變數,並且沒有初始化它們,就像例項變數一樣,編譯器會在預設建構函式中使用預設值初始化這些變數。

示例

public class Sample{
   static int num;
   static String str;
   static float fl;
   static boolean bool;
   public static void main(String args[]){
      System.out.println(Sample.num);
      System.out.println(Sample.str);
      System.out.println(Sample.fl);
      System.out.println(Sample.bool);
   }
}

輸出

0
null
0.0
false

例項變數的初始化

但是,如果宣告一個靜態且最終的例項變數,Java 編譯器不會在預設建構函式中初始化它,因此必須初始化靜態且最終的變數。如果不初始化,則會生成編譯時錯誤。

示例

public class Sample{
   final static int num;
   final static String str;
   final static float fl;
   final static boolean bool;
   public static void main(String args[]){
      System.out.println(Sample.num);
      System.out.println(Sample.str);
      System.out.println(Sample.fl);
      System.out.println(Sample.bool);
   }
}

編譯時錯誤

Sample.java:2: error: variable num not initialized in the default constructor
   final static int num;
^
Sample.java:3: error: variable str not initialized in the default constructor
   final static String str;
^
Sample.java:4: error: variable fl not initialized in the default constructor
   final static float fl;
^
Sample.java:5: error: variable bool not initialized in the default constructor
   final static boolean bool;
^
4 errors

不能從建構函式中為最終變數賦值 -

示例

public class Sample{
   final static int num;
   Sample(){
      num =100;
   }
}

輸出

Sample.java:4: error: cannot assign a value to final variable num
   num =100;
^
1 error

除了宣告語句之外,初始化靜態 final 變數的唯一方法是靜態塊。

**靜態塊**是一個帶有 static 關鍵字的程式碼塊。通常,它們用於初始化靜態成員。JVM 在類載入時,在 main 方法之前執行靜態塊。

示例

public class Sample{
   final static int num;
   final static String str;
   final static float fl;
   final static boolean bool;
   static{
      num =100;
      str= "krishna";
      fl=100.25f;
      bool =true;
   }
   public static void main(String args[]){
      System.out.println(Sample.num);
      System.out.println(Sample.str);
      System.out.println(Sample.fl);
      System.out.println(Sample.bool);
   }
}

輸出

100
krishna
100.25
true

更新於:2020年11月19日

6K+ 次瀏覽

啟動您的職業生涯

透過完成課程獲得認證

開始學習
廣告