子类:
public class TestPriority extends TestFatherPriority {
public TestPriority() {
System.out.println("子类构造方法");
}
static {
System.out.println("子类静态代码块");
}
{
System.out.println("子类代码块");
}
public static void main(String[] args) {
System.out.println("before子类main");
new TestPriority();
System.out.println("after子类main");
}
}
父类:
public class TestFatherPriority {
public TestFatherPriority() {
System.out.println("父类构造方法");
}
static {
System.out.println("父类静态代码块");
}
{
System.out.println("父类代码块");
}
public static void main(String[] args) {
System.out.println("before父类main");
new TestFatherPriority();
System.out.println("after父类main");
}
}
运行子类main方法,输出:
父类静态代码块
子类静态代码块
before子类main
父类代码块
父类构造方法
子类代码块
子类构造方法
after子类main
得出结论:
①无继承的情况下执行顺序:
静态代码块->main方法->代码块->构造方法
②有继承的情况下执行顺序:
父类静态代码块->子类静态代码块->main方法->父类代码块->父类构造方法->子类代码块->子类构造方法