初始化类变量时类加载类变量的序列

时间:2011-07-16 13:53:03

标签: java class variables static

当我运行此程序时,似乎有时会打印 55 ,但我确定 6 是正确的行为。

或者可能是我看错了?

public class Test {
    static int a = 55;

    static {
        a = 6;
    }

    public static void main(String abc[]){
        // a is 6
        System.out.println(a);
    }
}

修改

我认为Cularis做对了,当我移动静态块的顺序并实例化和初始化时,打印出55。确实是纹理顺序。

public class Test {
    static {
        a = 6;
    }

    static int a = 55;

    public static void main(String abc[]) {
        // a is 55
        System.out.println(a);
    }
}

1 个答案:

答案 0 :(得分:2)

查看Java Language Specification,尤其是

  

12.4.2详细的初始化程序

     

...接下来,执行类变量初始化器和静态   类的初始值设定项,或接口的字段初始值设定项,   按文字顺序,好像它们只是一个块,除此之外   最终的类变量和值为的接口的字段   编译时常量首先被初始化(§8.3.2.1,§9.3.1,   §13.4.9)。 ...