class abc {
int a = 0;
static int b;
static abc h = new abc(); //line 4
public abc() {
System.out.println("cons");
}
{
System.out.println("ini");
}
static {
System.out.println("stat");
}
}
public class ques {
public static void main(String[] args) {
System.out.println(new abc().a);
}
}
Run Code Online (Sandbox Code Playgroud)
当我写这段代码时,我按顺序得到输出:
ini
cons
stat
ini
cons
0
Run Code Online (Sandbox Code Playgroud)
这里当我在main(), class abc加载中创建一个新对象时,static变量和块按顺序执行.当控制进入第4行时,static abc h = new abc();将调用实例初始化块.为什么?为什么在第4行创建新对象时不调用静态块,直到那时静态块也没有被调用一次,所以根据惯例,应该调用静态块.为什么会出现这种意外的输出?