为什么 Final 变量不需要在 java 的 main 方法中进行初始化?

2022-09-04 21:07:19

当我只是想用Java做一些程序。我尝试使用变量,我知道变量必须在声明时初始化,但是在main方法内部,它接受变量而不进行初始化。我不知道是什么原因。任何人都可以告诉我原因吗?finalfinalfinal

谢谢

法典:

class name
{
     final int b; //here shows error
     public static void main(String args[])
    {
        final int a; // here no error... why?
        System.out.println("hai");
    }
}

答案 1

例如,变量级别

  • 最后一个变量只能初始化一次。

  • 类级别的最终变量必须在构造函数结束之前初始化。

对于本地(方法)级别

  • 方法级别的最终变量只能初始化一次。
  • 使用之前必须对其进行初始化

所以基本上,如果你不使用局部的最终变量,你也可以跳过它的初始化。

如果变量位于实例级别,则必须在定义或共价主体中对其进行初始化。

在代码中,您有一个从未初始化的实例变量,因此您遇到了错误。final int b

您还有一个从未使用的局部变量。因此,该变量没有错误。final int a


答案 2

答案在JLS中提供。

变量可以声明为 final。最后一个变量只能赋给一次。如果将最终变量赋值给,则这是一个编译时错误,除非在赋值之前它肯定是未赋值的

什么是最终分配

现在,对于局部变量,它的作用域在它声明的块内是有效的。流动将是线性的(从上到下)。因此,编译器可以很容易地识别变量最初初始化的位置。

但是在 a 的情况下,不可能找到哪个方法将首先赋值变量,除非它是在 .fieldConstructor

因此,您必须在声明期间或在构造函数中进行赋值。final fields


推荐