靜態化初始塊的執行順序

閒言少敘,看代碼java

package ppt_test;
class Root
{
	static{
		System.out.println("Root的靜態初始化塊");
	}
	{
		System.out.println("Root的普通初始化塊");
	}
	public Root()
	{
		System.out.println("Root的無參數的構造器");
	}
}
class Mid extends Root
{
	static{
		System.out.println("Mid的靜態初始化塊");
	}
	{
		System.out.println("Mid的普通初始化塊");
	}
	public Mid()
	{
		System.out.println("Mid的無參數的構造器");
	}
	public Mid(String msg)
	{
		//經過this調用同一類中重載的構造器
		this();
		System.out.println("Mid的帶參數構造器,其參數值:" + msg);
	}
}
class Leaf extends Mid
{
	static{
		System.out.println("Leaf的靜態初始化塊");
	}
	{
		System.out.println("Leaf的普通初始化塊");
	}	
	public Leaf()
	{
		//經過super調用父類中有一個字符串參數的構造器
		super("Java初始化順序演示");
		System.out.println("執行Leaf的構造器");
	}

}
public class TestStaticInitializeBlock {
	public static void main(String[] args) 
	{
		new Leaf();
	}
}

  

        這是運行結果,但是爲啥是這樣呢?函數

        原來是由於 this

        1.靜態初始化塊只執行一次。對象

        2.在構建子類對象時,先構建父類的對象,以後一次執行相應的靜態語句塊,而後依次執行相應的普通語句塊和構造函數,當在子類中有super();時,分類的構造函數使用super();調用的父類構造函數blog

相關文章
相關標籤/搜索