<分区>
在下面的Java代码中,Beetle类继承了Insect类。
class Insect {
private int i = 9;
protected int j;
Insect() {
System.out.println("i = " + i + ", j = " + j);
j = 39;
}
private static int x1
= printInit("static Insect.x1 initialized");
static int printInit(String s) {
System.out.println(s);
return 47;
}
}
public class Beetle extends Insect {
private int k = printInit("Beetle.k initialized");
public Beetle() {
System.out.println("k = " + k);
System.out.println("j = " + j);
}
private static int x2
= printInit("static Beetle.x2 initialized");
public static void main(String[] args) {
System.out.println("Beetle constructor");
Beetle b = new Beetle();
}
}
输出有点令人困惑。
static Insect.x1 initialized
static Beetle.x2 initialized
Beetle constructor
i = 9, j = 0
Beetle.k initialized
k = 47 j = 39
这个特定示例中的初始化顺序是什么?
为什么 x2 在 x1 之后立即初始化?以及为什么main方法的第一行(System.out.println("Beetle constructor");
)在x1和x2初始化之后执行。好困惑。
我知道派生类构造函数会自动调用基类构造函数(除非它有参数并且您会使用 super 关键字)。我知道变量在构造函数之前初始化,而静态变量在其他变量之前初始化。