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

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

谢谢

码:

 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"); } } 

例如变量级别

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

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

对于本地(方法)级别

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

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

如果变量是实例级别,则必须在定义或costructor主体中初始化它。

在你的代码中,你有一个实例变量final int b ,它永远不会被初始化,所以你有一个错误。

你还有一个从未使用的局部变量final int a 。 所以你没有该变量的错误。

答案在JLS中提供。

变量可以声明为final。 最终变量只能分配一次。 如果分配了最终变量,那么这是一个编译时错误,除非它在分配之前肯定是未分配的

什么是明确的任务

现在,在局部变量的情况下,它的范围在它声明的块内是有效的。 流量将是线性的(从上到下)。 因此,编译器可以轻松识别变量首先被初始化的位置。

但是在field情况下,除非在Constructor赋值,否则无法找到哪个方法首先分配变量。

因此,您必须在声明期间或构造函数中分配final fields

局部变量没有默认值,bt我们可以像这样声明

final int a; 没有错误,但我们无法访问它。 当我们尝试访问它时,就会发生错误。 但这种情况不适用于类变量。

因此,在您访问打印变量值的情况下,会发生错误。 谢谢