当我运行此程序时,似乎有时会打印 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);
}
}
答案 0 :(得分:2)
查看Java Language Specification,尤其是
12.4.2详细的初始化程序
...接下来,执行类变量初始化器和静态 类的初始值设定项,或接口的字段初始值设定项, 按文字顺序,好像它们只是一个块,除此之外 最终的类变量和值为的接口的字段 编译时常量首先被初始化(§8.3.2.1,§9.3.1, §13.4.9)。 ...