突然对子父类的静态代码块、代码块、构造器的执行顺序有点疑惑,想不起来了,赶紧测一把,记录下
父类
public class StaticClassParent {
static {
System.out.println("StaticClassParent static 代码块..............."); // 1
}
{
System.out.println("StaticClassParent 代码块.................."); // 3
}
public StaticClassParent(){
System.out.println("StaticClassParent 构造器................"); // 4
}
}
子类
public class StaticClass extends StaticClassParent {
static {
System.out.println(" StaticClass static 代码块..............."); // 2
}
{
System.out.println(" StaticClass代码块.................."); // 5
}
public StaticClass(){
System.out.println(" StaticClass StaticClass 构造器................"); // 6
}
}
测试类
@Test
public void test(){
StaticClass staticClass = new StaticClass();
}
输出
StaticClassParent static 代码块...............
StaticClass static 代码块...............
StaticClassParent 普通代码块..................
StaticClassParent 构造器................
StaticClass 普通代码块..................
StaticClass 构造器................
结论:
静态代码块 -> 普通代码块 -> 构造器
父类静态代码块 -> 子类静态代码块 -> 父类代码块 -> 父类构造器 -> 子类代码块 -> 子类构造器