java类加载顺序

时间:2021-11-29 17:34:26



看了一下书,顺便做了个小程序,研究了一下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