為什麼 Java 中的 final 變數不需要在 main 方法中進行初始化?


在 Java 中,**final** 是一個訪問修飾符,可以用於欄位、類和方法。

  • 如果一個方法是 final 的,則它不能被重寫。
  • 如果一個變數是 final 的,則它的值不能被進一步修改。
  • 如果一個類是 final 的,則它不能被擴充套件。

宣告 final 變數但不進行初始化

如果將變數宣告為 final,則必須在建構函式結束之前對其進行初始化。如果不這樣做,將會產生編譯時錯誤。

示例

 現場演示

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 變數但不進行初始化

通常,一旦宣告區域性變數,就需要在第一次使用之前對其進行初始化。如果嘗試在未初始化的情況下使用它,則會收到錯誤。

但是,在**使用之前**,可以宣告一個區域性變數為 final 而無需進行初始化。

示例 1

在以下 Java 程式中,我們將一個區域性變數宣告為 final。由於我們沒有使用它,因此編譯不會報錯。

public class Student {
   public static void main(String args[]) {
      final String name;
   }
}

但是,如果嘗試使用它,則會產生錯誤 -

示例 2

在以下 Java 程式中,我們將一個區域性變數宣告為 final 並使用它

 現場演示

public class Student {
   public static void main(String args[]) {
      final String name;
      System.out.println(name);
   }
}

編譯時錯誤

編譯上述程式時,會生成以下錯誤 -

Student.java:4: error: variable name might not have been initialized System.out.println(name);
                                                                                        ^
1 error

更新於: 2020-06-29

633 次瀏覽

開啟你的 職業生涯

透過完成課程獲得認證

立即開始
廣告