为什么 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 次浏览

开启你的 职业生涯

通过完成课程获得认证

立即开始
广告