例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 、繼承關係中,必須要父類初始化完成後,才初始化子類。