为什么 Final 变量不需要在 java 的 main 方法中初始化?
Why Final variable doesn't require initialization in main method in java?
当我只是想在 Java 中做一些程序时。我尝试使用 final
变量,我知道 final
变量必须在声明时初始化,但在 main 方法内部它接受 final
变量而不进行初始化。我不知道是什么 reason.Can 谁能告诉我原因。
谢谢
代码:
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");
}
}
JLS中提供了答案。
A variable can be declared final. A final variable may only be assigned to once. It is a compile-time error if a final variable is assigned to unless it is definitely unassigned immediately prior to the assignment.
现在,对于局部变量,它的作用域在它声明的块内是有效的。并且流程将是线性的(从上到下)。所以编译器可以很容易地识别出变量将首先被初始化的位置。
但是在 field
的情况下,不可能找到哪个方法将首先分配变量,除非它是在 Constructor
.
中赋值
因此,您必须在声明期间或构造函数中分配 final fields
。
对于实例变量级别
final 变量只能初始化一次。
class级的final变量必须在构造函数结束前初始化。
对于本地(方法)级别
- 方法级别的最终变量只能初始化一次。
- 使用前必须先初始化
所以基本上如果你不使用局部最终变量你也可以跳过它的初始化。
如果变量处于实例级别,则必须在定义或构造函数体中对其进行初始化。
在您的代码中,您有一个从未初始化的实例变量 final int b
,因此出现错误。
您还有一个从未使用过的局部变量 final int a
。所以你没有那个变量的错误。
局部变量没有默认值吧,我们可以这样声明
最终积分;
没有错误
但我们无法访问它。当我们尝试访问它时,就会发生错误。
但这种情况不适用于 class 变量 .
因此在您的情况下,当您访问打印变量的值时,会发生错误。
谢谢
如果没有标记为 final 的实例变量将获得默认值,而局部变量则不会获得默认值。
例如变量“int b”是最终的,它必须在声明时或构造函数中赋值。
对于 main 方法中的局部变量“int a”,如果未初始化则不会出错。
当我只是想在 Java 中做一些程序时。我尝试使用 final
变量,我知道 final
变量必须在声明时初始化,但在 main 方法内部它接受 final
变量而不进行初始化。我不知道是什么 reason.Can 谁能告诉我原因。
谢谢
代码:
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");
}
}
JLS中提供了答案。
A variable can be declared final. A final variable may only be assigned to once. It is a compile-time error if a final variable is assigned to unless it is definitely unassigned immediately prior to the assignment.
现在,对于局部变量,它的作用域在它声明的块内是有效的。并且流程将是线性的(从上到下)。所以编译器可以很容易地识别出变量将首先被初始化的位置。
但是在 field
的情况下,不可能找到哪个方法将首先分配变量,除非它是在 Constructor
.
因此,您必须在声明期间或构造函数中分配 final fields
。
对于实例变量级别
final 变量只能初始化一次。
class级的final变量必须在构造函数结束前初始化。
对于本地(方法)级别
- 方法级别的最终变量只能初始化一次。
- 使用前必须先初始化
所以基本上如果你不使用局部最终变量你也可以跳过它的初始化。
如果变量处于实例级别,则必须在定义或构造函数体中对其进行初始化。
在您的代码中,您有一个从未初始化的实例变量 final int b
,因此出现错误。
您还有一个从未使用过的局部变量 final int a
。所以你没有那个变量的错误。
局部变量没有默认值吧,我们可以这样声明
最终积分; 没有错误 但我们无法访问它。当我们尝试访问它时,就会发生错误。 但这种情况不适用于 class 变量 .
因此在您的情况下,当您访问打印变量的值时,会发生错误。 谢谢
如果没有标记为 final 的实例变量将获得默认值,而局部变量则不会获得默认值。
例如变量“int b”是最终的,它必须在声明时或构造函数中赋值。
对于 main 方法中的局部变量“int a”,如果未初始化则不会出错。