一结论
父类中的静态代码块→子类中的静态代码块→父类非静态代码块→父类构造函数→子类非静态代码块→子类构造函数
总之一句话总结:
父类早于子类、静态早于非静态、非静态早于构造函数
ps:静态代码块只会执行一次,多次调用也只有一次
二.代码
public class staticBase {
static {
System.out.println("base静态代码块 ");
}
{
System.out.println("base代码块 ");
}
staticBase (){
System.out.println("base构造函数");
}
public void run(){
System.out.println("base方法");
}
}
class staticBase2 extends staticBase{
static {
System.out.println("base2静态代码块 ");
}
{
System.out.println("base2代码块 ");
}
staticBase2 (){
System.out.println("base2构造函数 ");
}
public void run(){
System.out.println("base2方法");
}
}
class staticBase3 extends staticBase{
static {
System.out.println("base3静态代码块 ");
}
{
System.out.println("base3代码块 ");
}
staticBase3 (){
System.out.println("base3构造函数 ");
}
public void run(){
System.out.println("base3方法");
}
}
class main{
public static void main(String[] args) {
staticBase staticBase = new staticBase2();
staticBase.run();
staticBase = new staticBase3();
staticBase.run();
}
}
执行结果: