记住三者的执行顺序
先说结论:
- 静态代码块最先执行,且只在类第一次加载进来的时候执行一次,后续再次调用这个类,它不再执行
- 构造代码块紧随其后,且可以多次执行
- 构造方法在最后执行
- 上述结论的大前提:若继承,则父类先行
- 父类静态代码块->子类静态代码块->父类构造代码块->父类构造方法->子类构造代码块->子类构造方法
代码实例
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