看了一下书,顺便做了个小程序,研究了一下java类的加载顺序,大概应该是这样的吧。
*超类的静态成员
* 超类的静态块
* 子类的静态成员
* 子类的静态块
* 超类的非静态成员
* 超类的构造函数
* 子类的非静态成员
* 子类的构造函数
/**
* 类加载顺序问题
*
* 超类的静态成员
* 超类的静态块
* 子类的静态成员
* 子类的静态块
* 超类的非静态成员
* 超类的构造函数
* 子类的非静态成员
* 子类的构造函数
* @author liyang_hawk
*
*/
class Insect{
private int i = 9;
protected int j;
{
System.out.println("Insect code block");
}
Insect() {
System.out.println("i = " + i + ", j = " + j);
j = 39;
}
private static int x1 =
printInit("static Insect.x1 initialized");
static int printInit(String string) {
System.out.println(string);
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);
}
public static void main(String[] args) {
System.out.println("Beetle constructor");
new Beetle();
}
private static int x2 = printInit("static Beetle.x2 initialized");
}
结果:
static Insect.x1 initialized
static Beetle.x2 initialized
Beetle constructor
Insect code block
i = 9, j = 0
Beetle.k initialized
k = 47
j = 39