java中的静态最终变量初始化

时间:2015-10-08 17:33:53

标签: java oop

我对静态最终变量有疑问。在以下程序中:

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

即使最终变量尚未初始化,也不会抛出错误。为什么会这样?

3 个答案:

答案 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)

因为它已经在静态块中初始化了。如果您注释掉该行,则会产生编译错误。