import static net.mindview.util.Print.*;
class Insect{
private int i = 9;
protected int j;
Insect(){
print("i = " + i + ", j = " + j); // System.out.println()
j = 39;
}
private static int x1 = printInit("static Insct.x1 initialized");
static int printInit(String s) {
print(s);
return 47;
}
}
public class Bettle extends Insect{
private int k = printInit("Bettle.k initialized");
public Bettle(){
print("k = " + k);
print("j = " + j);
}
private static int x2 = printInit("static Bettle.x2 initialized");
public static void main(String[] args){
print("Beetle constructor");
Bettle b= new Bettle();
}
}
结果如下:
1. 由于调用static main,因此Bettle会被加载。
2. 由于Bettle是继承Insect类的,所以Insect类会被加载。
3. 由于一开始没有创建对象,因此只会初始化静态变量,从父类到子类。
4. 当创建对象b的时候,根据继承,会先初始化父类,从成员变量到构造函数,static成员只会初始化一次,之前被初始化了,因此现在不会初始化。