創(chuàng)建派生類對象時,構造函數(shù)的執(zhí)行順序是:基類構造函數(shù)、派生類對象成員構造函數(shù)、派生類本身的構造函數(shù)。對象創(chuàng)建時,代碼的加載順序是:靜態(tài)代碼、非靜態(tài)代碼、構造方法。
創(chuàng)建派生類對象時,構造函數(shù)的執(zhí)行順序是:基類構造函數(shù),派生類對象成員構造函數(shù),派生類本身的構造函數(shù)。
(推薦教程:java入門程序)
詳細介紹:
對象創(chuàng)建時代碼的加載順序為:靜態(tài)代碼 –> 非靜態(tài)代碼 –> 構造方法。
若繼承了父類,則加載順序為:父類的靜態(tài)的代碼 –> 子類的靜態(tài)的代碼 –> 父類內(nèi)部非靜態(tài)代碼 –> 父類的構造方法 –> 子類的非靜態(tài)代碼 –> 子類的構造方法。
其中,靜態(tài)代碼包括(靜態(tài)方法,靜態(tài)變量,靜態(tài)代碼塊等),非靜態(tài)代碼即(成員方法,成員變量,成員代碼塊等),同一種代碼,寫在上面的先加載。
(視頻教程推薦:java視頻教程)
實例:
public class ExtendsTest { public static void main(String[] args) { // TODO Auto-generated method stub C c = new D(); } } class C { static { System.out.println("C 基類靜態(tài)域 "); } { System.out.println("C 基類對象成員構造函數(shù)"); } public C() { System.out.println("C 基類本身的構造函數(shù)"); } } class D extends C { static { System.out.println("D 派生類靜態(tài)域"); } { System.out.println("D 派生類對象成員構造函數(shù)"); } public D() { System.out.println("D 派生類本身的構造函數(shù)"); } }
輸出結果: