基本顺序如下
父类静态对象或者静态代码块(按书写代码顺序运行)------>子类静态对象或者静态代码块(按书写代码顺序运行) ------->父类的非静态代码块-------->父类构造函数
------> 子类的非静态代码块-------->子类构造函数
public class Father {
static int i=0;
static{
System.out.println(i);
System.out.println("父类静态代码块");
}
public Father() {
// TODO Auto-generated constructor stub
System.out.println("父类构造函数调用了");
}
{
System.out.println("父类非静态代码块");
}
}
public class Son extends Father{
public Son() {
// TODO Auto-generated constructor stub
System.out.println("子类构造函数调用了");
}
public static void main(String[] args) {
Son son= new Son();
System.out.println("main函数");
}
{
System.out.println("子类非静态代码块");
}
static{
System.out.println("子类静态代码块");
}
}
结果:
0父类静态代码块子类静态代码块父类非静态代码块父类构造函数调用了子类非静态代码块子类构造函数调用了main函数