總結一下對象的創建過程,假設有一個名為Dog的類: 1. 即使沒有顯示地使用static關鍵字,構造器實際上也是靜態的方法,因此,當首次創建類型為Dog的對象時(構造器可以看成靜態方法),或者Dog類的靜態方法/靜態域首次被訪問時,java解釋器必須查找類的路徑,以定位Dog.class文件。 2. ...
總結一下對象的創建過程,假設有一個名為Dog的類:
- 1. 即使沒有顯示地使用static關鍵字,構造器實際上也是靜態的方法,因此,當首次創建類型為Dog的對象時(構造器可以看成靜態方法),或者Dog類的靜態方法/靜態域首次被訪問時,java解釋器必須查找類的路徑,以定位Dog.class文件。
- 2. 然後載入Dog.class(後面會學到,這將創建一個Class對象),有關靜態初始化的所有動作都會執行。因此,靜態初始化只在Class對象首次載入的時候進行一次。
- 3. 當用new Dog()創建對象的時候,首先將在堆上為Dog對象分配足夠的存儲空間。
- 4. 這塊存儲空間會被清零,這就自動地將Dog對象中的所有基本類型數據都設置成了預設值(對數字來說是0,對布爾值和字元型也相同),而引用則被置為null。
- 5. 執行所有出現於欄位定義處的初始化動作。
- 6. 執行構造器。正如將在第7章所看到的,這可能會牽扯到很多動作,尤其是涉及繼承的時候。