關於代碼塊的經典考題(以下代碼塊的執行順序是什麼)

代碼塊

a)普通代碼塊
b)構造塊:類中定義的代碼塊,對象產生時執行,產生幾個對象執行幾次,優先於構造方法
c)靜態代碼塊:類加載時執行,優先於構造塊,只執行一次,main中的優先於main

關於代碼塊有一個經典的問題,就是構造方法,構造塊以及靜態塊的區別和執行順序

class A{
    public A(){
        System.out.println("1.A類的構造方法");
    }
    {
        System.out.println("2.A類的構造塊");
    }
    static {
        System.out.println("3.A類的靜態塊");
    }
}
public class KuaiTest extends A{
    public KuaiTest(){
        System.out.println("4.B構造方法");
    }
    {
        System.out.println("5.B類的構造塊");
    }
    static {
        System.out.println("6.B類的靜態塊");
    }
    public static void main(String[] args) {
        System.out.println("7.start------");
        new KuaiTest();
        new KuaiTest();
        System.out.println("8.end");
    }
}

因爲主類中的靜態塊優先於主方法執行,因此先執行靜態代碼塊進行類加載過程
又因爲繼承,所以執行3,6,此時類加載完畢,進入主方法7,接下來new對象,先調用父類構造方法,再調用子類構造方法,
又因爲構造塊優先於構造方法,且new幾個對象調用幾次,因此構造方法調用順序爲21542154
最後執行8因此最後結果爲
367215421548

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章