對象A的創建過程:
1. 構造器實際上是靜態方法,所以,當首次創建對象A 或者 A類的靜態方法/靜態域首次被訪問時,Java解釋器查找類路徑,以位
A.class文件。
2. 載入A.class,有關靜態初始化的所有動作都會執行()。因此,靜態初始化只在Class對象首次加載的時候進行一次。
3. 當用new A()創建對象時,首先在堆上為A對象分配足夠的存儲空間。
4. 這個存儲空間會被清零,這樣就自動將A對象的所有基本類型數據設置成了默認值,引用則被設置成了null。
5. 執行所有出現於字段定義處的初始化工作。
6. 執行構造器。
屬性、方法、構造方法和自由塊都是類中的成員,在創建類的對象時,類中各成員的執行順序:
1. 父類靜態成員和靜態初始化快,按代碼出現的順序依次執行。
2. 子類靜態成員和靜態初始化塊,按代碼出現的順序依次執行。
3. 父類的實例成員和實例初始化塊,按代碼出現的順序依次執行。
4. 父類的構造方法(如果沒有明確指出調用某個父類的構造器,就會默認調用父類默認構造器,如果不存在默認構造器,編譯器會出錯)
5. 子類實例成員和實例初始化塊,按代碼出現的順序依次執行。
6. 子類的構造方法。
編寫構造器的一條有效准則:(Java編程思想第四版中文P163)
“用盡可能簡單的方法使對象進入正常狀態,如果可以的話,避免調用其他方法”,在構造器內唯一能夠安全調用的哪些方法是基類中的final方法。