什麼是空白 final 變數?Java 中的靜態空白 final 變數是什麼?


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

public static int num = 39;

例項變數 − 這些變數屬於類的例項(物件)。它們在類中宣告,但在方法之外。在例項化類時初始化這些變數。可以從該特定類的任何方法、建構函式或塊中訪問它們。

必須使用物件訪問例項變數。即,要訪問例項變數,需要建立類的物件,並使用此物件訪問這些變數。

final − 一旦您宣告一個變數為 final,就不能重新分配值。

空白變數

一個未初始化的 final 變數稱為空白 final 變數。與例項變數一樣,final 變數不會使用預設值初始化。因此,必須在宣告 final 變數後立即初始化它們

但是,如果您嘗試在程式碼中使用空白變數,則會生成編譯時錯誤。

示例

在以下 Java 程式中,類 Student 包含兩個 final 變數 name 和 age,並且它們尚未初始化。

public class Student {
   public final String name;
   public final int age;
   public void display(){
      System.out.println("Name of the Student: "+this.name);
      System.out.println("Age of the Student: "+this.age);
   }
   public static void main(String args[]) {
      new Student().display();
   }
}

編譯時錯誤

編譯時,此程式會生成以下錯誤。

Student.java:3: error: variable name not initialized in the default constructor
   private final String name;
                        ^
Student.java:4: error: variable age not initialized in the default constructor
   private final int age;
                     ^
2 errors

解決方案

要解決此問題,您需要初始化宣告的 final 變數,如下所示:

public class Student {
   public final String name;
   public final int age;
   public Student(){
      this.name = "Raju";
      this.age = 20;
   }
   public void display(){
      System.out.println("Name of the Student: "+this.name );
      System.out.println("Age of the Student: "+this.age );
   }
   public static void main(String args[]) {
      new Student().display();
   }
}

輸出

Name of the Student: Raju
Age of the Student: 20

靜態空白 final 變數

同樣,如果您宣告一個靜態變數為 final 且未初始化,則它被視為靜態 final 變數。

當一個變數同時宣告為 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 變數。

要使上述程式工作,您需要在靜態塊中初始化 final 靜態變數,如下所示:

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

更新於: 2020-07-02

2K+ 瀏覽量

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告