java new一個類對象,類中各部分執行順序:
靜態代碼塊—非靜態代碼塊—構造函數—一般方法。
public class father { private String name; father(){ System.out.println("--父類的無參構造函數--"); } father(String name){ this.name=name; System.out.println("--父類的有參構造函數--"+this.name); } static{ System.out.println("--父類的靜態代碼塊--"); } { System.out.println("--父類的非靜態代碼塊--"); } public void speak(){ System.out.println("--父類的方法--"); } public static void main(String[] args) { System.out.println("--父類主程序--"); father father=new father("父親的名字"); father.speak(); } }
運行如上main方法結果為:
創建子類繼承該父類測試執行順序。
1 public class Son extends father{ 2 private String name; 3 4 static{ 5 System.out.println("--子類的靜態代碼塊--"); 6 } 7 8 { 9 System.out.println("--子類的非靜態代碼塊--"); 10 } 11 12 Son(){ 13 System.out.println("--子類的無參構造函數--"); 14 } 15 16 Son(String name){ 17 this.name=name; 18 System.out.println("--子類的有參構造函數--"+this.name); 19 } 20 21 @Override 22 public void speak(){ 23 System.out.println("--子類Override了父類的方法--"); 24 } 25 26 public static void main(String[] args) { 27 System.out.println("--子類主程序--"); 28 29 Son son=new Son("兒子的名字"); 30 son.speak(); 31 } 32 }
運行如上main方法結果如下:
運行如下main方法:
1 public static void main(String[] args) { 2 System.out.println("--子類主程序--"); 3 4 Son son=new Son("兒子的名字"); 5 son.speak(); 6 7 father father=new father("父親的名字"); 8 father.speak(); 9 10 }
結果如下:
所以:
new一個類對象,類中各部分執行順序:靜態代碼塊—非靜態代碼塊—構造函數—一般方法。
子類繼承父類各部分執行順序為:父靜態代碼塊--子靜態代碼塊--父非靜態代碼--父無參構造函數--子靜態代碼塊--子構造函數--方法。
注意:創建子類對象調用子類的構造方法的時候會先調用父類的構造方法,在子類的構造方法中調用父類的構造方法是用super(),如果沒有寫super(),則默認調用父類的無參構造方法。