為什麼 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
廣告