代码及测试结果如下:
public class InitSequenceTest {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
new BB();
}
}
class AA {
private int i = 100;
protected int j;
AA(){
System.out.println("i="+i +",j="+j);
j=999;
}
static int x = initStaticData("init x value");
protected static int initStaticData(String s){
System.out.println(s);
return 222;
}
private int yy = initStaticData("init yy value");
}
class BB extends AA {
private static int jj = initStaticData("init JJ value");
BB(){
System.out.println("jj="+jj);
System.out.println("j="+j);
}
private int y = initStaticData("init y value");
}
result:
init x value
init JJ value
init yy value
i=100,j=0
init y value
jj=222
j=999
结果分析:
- 初始化基类的静态成员变量
- 初始化子类的静态成员变量
- 初始化基类的非静态成员变量(按照变量定义顺序执行)
- 执行基类构造函数
- 初始化子类的非静态成员变量(按照变量定义顺序执行)
- 执行子类构造函数