四種方式:
http://wenku.baidu.com/link?url=mv6VbMd3d-aCkbGMhn6rbLwFbef7v60nRbyA-thP6Y7hqtjiv0K0_kdtfOWaUjdPiFZ0u8U6XWJ4b3pDVxmTTj6NqMC2E4-dcCLmQ_IgS3C
java創建對象初始化過程(句柄):http://zhangjunhd.blog.51cto.com/113473/17124/
http://blog.sina.com.cn/s/blog_687ab1d70100r9gv.html
對象的創建過程:
1. 所有的類都是在對其第一次使用時,動態加載到JVM中。當首次創建類型爲Dog的對象時,或者Dog類的靜態方法,靜態屬性域首次被訪問時,java解釋器查找classPath,定位到Dog.class文件
2. 載入Dog.class文件,生成一個Class類型對象,所有有關的靜態初始化動作都會執行,靜態代碼塊,靜態成員屬性。 並且這種初始化動作只在Class對象首次加載時候進行一次。
3. 當用new Dog()創建對象時,首先JVM在堆heap上爲Dog對象分配足夠的存儲空間
4. 存儲空間清空,自動將Dog對象中的所有基本類型數據都設置成了默認值,對象引用被設置爲null
5. 執行所有在字段定義處的一些初始化操作
6. 調用構造器方法。(沒有繼承)
如此一來,便創建了這個對象.
如果有繼承 則在第6步:遞歸調用構造器執行構造方法