请写出如下代码的运行结果:
代码语言:javascript复制public class ClassA {
public ClassA(){
System.out.println("construct ClassA");
}
static {
System.out.println("Class A");
}
{
System.out.println("in ClassA");
}
}
public class ClassB extends ClassA{
public ClassB(){
System.out.println("construct ClassB");
}
static {
System.out.println("Class B");
}
{
System.out.println("in ClassB");
}
public static void main(String[] args) {
new ClassB();
}
}
打印结果为
ClassA
ClassB
in ClassA
construct ClassA
in ClassB
construct ClassB // 构造方法
分析
- 静态代码块,jvm加载类时执行,只执行一次
- 构造代码块,创建对象时执行,顺序优先于构造函数
- 子类初始化时,会调用父类的构造代码块和构造方法,以初始化继承的父类属性,但不会创建父类对象
总结
执行顺序:静态代码块>构造代码块>构造方法>普通代码块
参考文献
https://www.cnblogs.com/ysocean/p/8194428.html