有兩個類,一個Yuan繼承Yan,調用Yuan的有參的構造函數,其調用順序如何,且看代碼:
package cn.yan.teststarter.test;
public class Yan {
private String name;
static {
System.out.println(8);
}
public Yan() {
System.out.println(1);
}
public Yan(String name) {
this.name = name;
System.out.println(2);
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
package cn.yan.teststarter.test;
public class Yuan extends Yan {
private String name;
static {
System.out.println(9);
}
public Yuan() {
System.out.println(3);
}
public Yuan(String name) {
this.name = name;
System.out.println(4);
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
public static void main(String[] args) {
new Yuan("li");
}
最終其執行結果爲:
8
9
1
4
由此我們可以發現,調用子類的有參構造函數,會先執行其父類的無參構造函數,又因靜態代碼塊最先執行,則,執行順序分別是:
父類靜態代碼塊 -->> 子類靜態代碼塊 -->> 父類無參構造函數 -->> 子類有參構造