Java基礎整理(2) 繼承與代碼塊執行順序

一些混淆點


繼承與代碼塊執行順序

類的順序

public class Father {

    public Father(){
        System.out.println("--父類的無參構造函數--");
    }

    static{
        System.out.println("--父類的靜態代碼塊--");
    }

    {
        System.out.println("--父類的非靜態代碼塊--");
    }

    //加入一個main程序後
    public static void main(String[] args) {
        System.out.println("--Main函數執行--");
        Father father=new Father();
    }
}

執行結果如下圖
在這裏插入圖片描述
可見,靜態代碼塊在main函數之前執行,執行順序爲,靜態代碼塊>非靜態代碼塊>構造函數
靜態代碼塊在Main函數執行之前執行。

子父類的順序

	public class Son extends Father {
	    static{
	        System.out.println("--子類的靜態代碼塊--");
	    }
	
	    {
	        System.out.println("--子類的非靜態代碼塊--");
	    }
	
	    Son(){
	        System.out.println("--子類的無參構造函數--");
	    }
	
	    public static void main(String[] args) {
	
	        System.out.println("--子類的Main函數執行了--");
	        Father father=new Father();
	        Son son=new Son();
	    }
	}

執行結果如下圖
在這裏插入圖片描述
可見
1、new一個函數時先加載其父類,從非靜態代碼塊開始進行加載。順序:父類非靜態代碼塊>父類構造函數>子類非靜態代碼塊>子類構造函數。
2、加載一個類時從靜態代碼塊開始,從其父類開始加載。PS:靜態變量的定義與靜態代碼塊的執行與其在類中順序有關,依照從上到下順序。

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