为什么 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
广告