我对静态最终变量有疑问。在以下程序中:
class StaticPuzzel2 {
public static void main (String[] args) {
}
final static int i;
static {
System.out.print ("\n\t"+ StaticPuzzel2.i);
i = 11;
System.out.print ("\n\t"+ StaticPuzzel2.i);
System.out.print ("\n\t"+ i);
}
}
即使最终变量尚未初始化,也不会抛出错误。为什么会这样?
答案 0 :(得分:1)
我假设你想知道为什么在将它设置为11
之前访问它时不会抛出错误。原因是,变量实际上是使用默认值(零)初始化的,并且在运行时更改,就像任何其他变量一样。
使用静态初始化块时,final
修饰符仅确保仅为变量赋值一次。它没有做的,就是在它发生之前使它不存在。
答案 1 :(得分:0)
您正在static
块中初始化static
变量。这就是原因。
试试这个:
final static int i = 0;
来自java specs:
变量可以声明为final。最终变量只能分配一次。如果分配了最终变量,则为编译时错误,除非在分配之前明确地未分配
所以它实际上并不意味着if应该在声明时初始化。但这意味着它只能分配一次,这个赋值可以是声明或初始化程序块的一部分,就像你的情况一样。 现在这会给你错误。
您可以查看此答案以获取更多详细信息。 Java - Can final variables be initialized in static initialization block?
答案 2 :(得分:0)
因为它已经在静态块中初始化了。如果您注释掉该行,则会产生编译错误。