顺序:静态代码块 → main → 构造代码块 → 构造方法
public class Test05 {
static{
("父类静态代码块开始执行!");
}
{
("父类构造代码块开始执行!");
}
public Test05(){
("父类构造方法开始执行!");
}
public static void main(String[] args) {
("父类开始运行main");
new Test05();
}
}
运行结果:
父类静态代码块开始执行!
父类开始运行main
父类构造代码块开始执行!
父类构造方法开始执行!
当存在继承的情况下:
执行顺序:父类静态代码块 → 子类静态代码块 → main → 父类构造代码块 → 父类构造方法 → 子类构造代码块 → 子类构造方法
public class Test06 extends Test05{
static{
("子类静态代码块开始执行!");
}
{
("子类构造代码块开始执行!");
}
public Test06(){
("子类构造方法开始执行!");
}
public static void main(String[] args) {
("子类开始运行main");
new Test06();
}
}
运行结果:
父类静态代码块开始执行!
子类静态代码块开始执行!
子类开始运行main
父类构造代码块开始执行!
父类构造方法开始执行!
子类构造代码块开始执行!
子类构造方法开始执行!