父類、靜態構造程式碼塊、構造程式碼塊、建構函式
阿新 • • 發佈:2019-02-08
如果類還沒有被載入:
1、先執行父類的靜態程式碼塊和靜態變數初始化,並且靜態程式碼塊和靜態變數的執行順序只跟程式碼中出現的順序有關。
2、執行子類的靜態程式碼塊和靜態變數初始化。
3、執行父類的例項變數初始化
4、執行父類的建構函式
5、執行子類的例項變數初始化
6、執行子類的建構函式
如果類已經被載入:
執行結果:
1、先執行父類的靜態程式碼塊和靜態變數初始化,並且靜態程式碼塊和靜態變數的執行順序只跟程式碼中出現的順序有關。
2、執行子類的靜態程式碼塊和靜態變數初始化。
3、執行父類的例項變數初始化
4、執行父類的建構函式
5、執行子類的例項變數初始化
6、執行子類的建構函式
如果類已經被載入:
則靜態程式碼塊和靜態變數就不用重複執行,再建立類物件時,只執行與例項相關的變數初始化和構造方法。
package cn.edu.bjut.ai.BasicClass; public class SuperMan { static{ System.out.println("父類靜態"); } { System.out.println("父類非靜態"); } public SuperMan() { System.out.println("超人建構函式"); } }
package cn.edu.bjut.ai.BasicClass; public class Man extends SuperMan{ //Man類的成員變數(屬性) String name; int age; static{ System.out.println("子類靜態程式碼塊兒============"); } //構造程式碼塊: { name = "wang"; age = 18; System.out.println("子類非靜態 構造程式碼塊兒 haha!"+name+": "+age); } //構造方法 public Man( String name, int age) { this.name = name; this.age = age; System.out.println("普通建構函式"); } public Man() { System.out.println("匿名建構函式"); } //顯示資訊函式 public void show() { System.out.println("show函式 "+name+":"+age);//注意顯示的和構造程式碼塊不同 } }
package cn.edu.bjut.ai.BasicClass;
public class BasicJava {
public static void main(String[] args)
{
//建立一個Man類物件a
Man a = new Man("Mr.Bang", 28);
//顯示a的資訊
a.show();
Man b = new Man();
b.show();
}
}
執行結果:
父類靜態 子類靜態程式碼塊兒============ 父類非靜態 超人建構函式 子類非靜態 構造程式碼塊兒 haha!wang: 18 普通建構函式 show函式 Mr.Bang:28 父類非靜態 超人建構函式 子類非靜態 構造程式碼塊兒 haha!wang: 18 匿名建構函式 show函式 wang:18