java繼承關系中靜態代碼塊、代碼塊、構造方法的執行順序


以下是發生在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.成員變量初始化:默認初始化----》顯示初始化----》構造方法初始化


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM