1. 程式人生 > >當一個類被載入時成員的初始化順序

當一個類被載入時成員的初始化順序

        當一個類因為例項化被載入時,其成員的初始化順序是什麼呢?

         先看下面這段程式碼:

class Fsx{
	public Fsx(){
		System.out.println("Fsx無參構造器初始化了");
	}
	public Fsx(int i){
		System.out.println("Fsx有參構造器初始化了");
	}
}

public class Explore {
	
	private Fsx fsk=new Fsx(13);
	private static Fsx fsx=new Fsx();
	
	static{
		System.out.println("靜態程式碼塊被執行了");
	}
	
	{
		System.out.println("普通程式碼塊執行了");
	}
	public Explore(){
		System.out.println("構造器執行了");
	}
	
    public static void main(String[] args){
    	new Explore();
    	new Explore();
    	
    } 
}
      執行程式,結果如下所示:
Fsx無參構造器初始化了
靜態程式碼塊被執行了
Fsx有參構造器初始化了
普通程式碼塊執行了
構造器執行了
Fsx有參構造器初始化了
普通程式碼塊執行了
構造器執行了

        由執行結果可以清楚的得出結論,當一個類第一次因例項化而被載入時,其初始化順序是:1、靜態屬性,2、靜態程式碼塊,3、普通屬性,4、普通程式碼塊,5、構造器。當再次載入該類時,由於靜態屬性和靜態程式碼塊是所有類共有的,所以不再初始化,從第三步開始。

     最近在看《java程式設計思想》,上面的例子顯示出,當一個匯出類被例項化時,會首先例項化基類,再例項化匯出類。也就是說基類是匯出類的一個隱含屬性一樣。