當一個類被載入時成員的初始化順序
阿新 • • 發佈:2018-12-26
當一個類因為例項化被載入時,其成員的初始化順序是什麼呢?
先看下面這段程式碼:
執行程式,結果如下所示: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程式設計思想》,上面的例子顯示出,當一個匯出類被例項化時,會首先例項化基類,再例項化匯出類。也就是說基類是匯出類的一個隱含屬性一樣。