父類靜態(代碼塊,變量賦值二者按順序執行)
子類靜態
父類構造代碼塊
父類構造方法
子類構造代碼塊
子類構造方法
普通方法在實列調用的時候執行,肯定位於上面之后了
1 //父類A 2 public class A { 3 4 A() { 5 System.out.println("A構造方法"); 6 } 7 8 { 9 System.out.println("A構造代碼塊"); 10 } 11 12 static{ 13 System.out.println("A靜態碼塊"); 14 } 15 16 public static void main(String[] args) { 17 C c1=new C(); 18 }
//子類C public class C extends A { static { System.out.println("C的靜態代碼塊"); } { System.out.println("C構造代碼塊"); } C() { System.out.println("C的構造方法"); } }
結果:
這樣就很明了了,下面稍微擴展一下,如果在main中出現 new A()呢?我們來看
1 //父類A 2 public class A { 3 4 static{ 5 System.out.println("A靜態碼塊"); 6 } 7 8 A() { 9 System.out.println("A構造方法"); 10 } 11 12 { 13 System.out.println("A構造代碼塊"); 14 } 15 public static void main(String[] args) { 16 A a=new A(); 17 C c1=new C(); 18 }
//子類C public class C extends A { static { System.out.println("C的靜態代碼塊"); } { System.out.println("C構造代碼塊"); } C() { System.out.println("C的構造方法"); } }
結果:
結果先執行完父類A,只執行子類C,並不是執行完A的靜態就執行C的靜態,這里可能有誤區。
博主實測,歡迎指正。