java继承关系中静态代码块、代码块、构造方法的执行顺序

时间:2023-01-05 19:33:42

以下是发生在java继承关系中静态代码块、代码块、构造方法的执行顺序的案例:

 

public class Homework6 {
    public static void main(String[] args) {
        new H2();
        
    }
}
class H1{
    {
        System.out.println("父类代码块");
    }
    public H1(){
        System.out.println("父类构造");
    }
    static{
        System.out.println("父类静态代码块");
    }
}

class H2 extends H1{
    static{
        System.out.println("子类静态代码块");
    }
    {
        System.out.println("子类代码块");
    }
    public H2(){
        System.out.println("子类构造");
    }
}

执行结果如下所示:

父类静态代码块
子类静态代码块
父类代码块
父类构造
子类代码块
子类构造

 执行流程分析:

 1.java程序中静态内容是随着类的加载而加载的,由于存在继承关系,因此先加载父类而后加载子类,相应的就是先执行父类静态代码块,再执行子类静态代码块

 2.类加载完成后程序就开始执行main方法中,紧接着进行初始化工作,由于代码块执行优于构造方法,因此出现先执行父类代码块,再执行父类构造方法,紧接着子类代码块,子类构造方法。

 3.类的初始化是分层初始化的,先对父类进行初始化,再对子类进行初始化。在目标类中执行顺序为:1.成员变量初始化:默认初始化----》显示初始化----》构造方法初始化