构造代码块、静态代码块、构造方法的执行顺序

2024-07-05 13:26:52 浏览数 (2)

请写出如下代码的运行结果:

代码语言: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

0 人点赞