记住三者的执行顺序

先说结论:

  • 静态代码块最先执行,且只在类第一次加载进来的时候执行一次,后续再次调用这个类,它不再执行
  • 构造代码块紧随其后,且可以多次执行
  • 构造方法在最后执行
  • 上述结论的大前提:若继承,则父类先行
  • 父类静态代码块->子类静态代码块->父类构造代码块->父类构造方法->子类构造代码块->子类构造方法

代码实例

class A{

    public A(){
        System.out.println("我是A的构造方法");
    }
    static{
        System.out.println("我是A的静态代码块,我最先执行,只执行一次");
    }
    {
        System.out.println("我是A的构造代码块,我比构造方法先执行");
    }

}
class B extends A{
    static{
        System.out.println("我是B的静态代码块,我最先执行,我只执行一次");
    }
    {
        System.out.println("我是B的构造代码块,我比构造方法先执行");
    }
    public B(){
        System.out.println("我是B的构造方法");
    }

}

public class test {

    public static void main(String[] args) {

        B b = new B();
        System.out.println("");
        A b1 = new B();
            }
        }

执行结果


我是A的静态代码块,我最先执行,只执行一次
我是B的静态代码块,我最先执行,我只执行一次
我是A的构造代码块,我比构造方法先执行
我是A的构造方法
我是B的构造代码块,我比构造方法先执行
我是B的构造方法

我是A的构造代码块,我比构造方法先执行
我是A的构造方法
我是B的构造代码块,我比构造方法先执行
我是B的构造方法

进程已结束,退出代码0