public class A{
static int a = 1111;
static
{
a = a-- - --a;
}
{
a = a++ + ++a;
}
public static void main(String[] args) {
System.out.println(a);
}
}
他们询问程序将输出什么。我很清楚,如果我们还没有创建类的实例,那么类级(静态)变量将被初始化,并且静态块也将被执行,即使没有创建类实例。而这里的答案是2。因为在调用的时候,只执行了静态初始化块。但我有一个不同的问题。我认为会有一个 NPE 异常,因为该变量а还不存在。我想,我这样做是因为我相信public static void main(String[] args)首先执行入口点,然后按顺序进行初始化。
所以在什么时候静态字段和统计数据被初始化了。类块А?
类初始化
在初始化之前,加载必要的类(ClassLoader、java.lang ...需要单独考虑)
初始化顺序:
代码示例: