宣告變數為靜態(static)和最終(final)時,需要遵循哪些規則?


靜態變數 − 靜態變數也稱為類變數。可以使用關鍵字`static`宣告變數。一旦將變數宣告為靜態,無論建立多少個物件,類中都只有一個副本。

public static int num = 39;

final − 一旦將變數宣告為`final`,就不能重新賦值。當將類的變數宣告為`static`和`final`時,就將其設定為常量。

需要遵循的規則

  • 必須初始化 − 在Java中,不必在類中初始化例項變數。如果在編譯時不初始化它們,Java編譯器會在預設建構函式中初始化它們。

但是,如果將例項變數宣告為`static`和`final`,Java編譯器不會在預設建構函式中初始化它,因此必須初始化`static`和`final`變數。如果不初始化,則會生成編譯時錯誤。

示例

class Data{
   static final int num;
}
public class ConstantsExample {
   public static void main(String args[]) {
      System.out.println("value of the constant: "+Data.num);
   }
}

編譯時錯誤

ConstantsExample.java:2: error: variable num not initialized in the default constructor
static final int num;
                   ^
1 error
  • 只能在靜態塊中初始化 − 當一個變數被宣告為`static`和`final`時,只能在靜態塊中初始化它。如果嘗試在其他地方初始化它,編譯器會認為您試圖重新賦值,並生成編譯時錯誤。
class Data{
   static final int num;
   Data(int i){
      num = i;
   }
}

public class ConstantsExample {
   public static void main(String args[]) {
      System.out.println("value of the constant: "+Data.num);
   }
}

編譯時錯誤

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

要使此程式正常工作,需要在靜態塊中初始化`final static`變數,如下所示:

class Data{
   static final int num;
   static{
      num = 1000;
   }
}

public class ConstantsExample {
   public static void main(String args[]) {
      System.out.println("value of the constant: "+Data.num);
   }
}

輸出

value of the constant: 1000

更新於:2019年7月30日

248 次瀏覽

啟動您的職業生涯

完成課程後獲得認證

開始學習
廣告