java中對象如何初始化(實例化)

學習JAVA這門面向對象的語言,實質就是不斷地創建類,並把類實例化爲對象並調用方法。對於初學JAVA的人總搞清楚對象是如何實例化的,假如類之間存在繼承關係,那就更糊塗了。下面我們通過兩個例題來說明對象的實例化過程。例1: 編譯並運行該程序會有以下輸出Static Block Employee Company:china soft Non-Static Block Employee phone:0755-51595599 Employee(String) Empoloyee() 下面我們來對結果做分析: 1 在代碼34行實例化對象時, 先對給靜態變量分配內存空間並初始化,然後執行靜態塊。因此,在這裏會輸出:Static Block Employee Company:china soft Employee Company:china soft的輸出也說明是先初始化靜態變量然後再執行靜態塊,否則company將爲null。 2然後在內存中爲Employee分配內存空間,並做默認初始化(即所有變量初始化爲默認值,這裏都初始化爲null)。 3 默認初始化完成後,開始顯示初始化。即執行第5行,將phone初始化"0755-51595599",並且執行非靜態方法塊;因此在這裏會有以下輸出:Non-Static Block Employee phone:0755-51595599 4 最後才調用默認構造函數,在默認構造函數中調用了帶參數的構造函數,所以在這裏先輸出帶參數構造函數中的:Employee(String),然後才輸出:Empoloyee()。

例2: 上面的代碼中Manager繼承了前面寫的Employee類,當我們編譯並運行Manager類,會產生以下的輸出:

Static Block Employee Company:china soft Sub Static Block Manager department:sale Non-Static Block Employee phone:0755-51595599 Employee(String) Empoloyee() Sub Non-Static Block Manager salary:8000 Manager(String) Manager() 下面我們對結果做分析: 1 在行34實例化對象時,由於Manager繼承了Employee,所以先從父類Employee開始;先給父類靜態變量分配內存空間並初始化,然後執行父類靜態塊。然後再給子類靜態變量分配內存空間並初始化,然後執行子類靜態塊,所以會得到以下輸出: Static Block Employee Company:china soft Sub Static Block Manager department:sale

2然後在內存中爲父類Employee分配內存空間,並做默認初始化;再爲子類Manager分配內存空間,並做默認初始化。 3默認初始化完成後,從父類開始顯示初始化並執行非靜態方法塊和構造函數,然後再子類開始顯示初始化並執行非靜態方法塊和構造函數。因此會產生以下的輸出:Employee phone:0755-51595599 Employee(String) Empoloyee() Sub Non-Static Block Manager salary:8000 Manager(String) Manager()

總結以上內容,可以得到對象初始化過程: 1、 如果存在繼承關係,就先父類後子類; 2 、如果在類內有靜態變量和靜態塊,就先靜態後非靜態,最後纔是構造函數; 3 、繼承關係中,必須要父類初始化完成後,才初始化子類。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章