在java中,當我們new一個物件時,物件中的成員,初始化區塊以及建構方法的載入是有一定的順序的,看下面一副圖:
一、單類(無基類)下的初始化順序:
public class Parent {
static String staticStr = "父類靜態變數";
private String str = "父類別成員變數";
. println(staticStr);
System.out.println("父類靜態初始化區塊");
}
{
Systup.out.println();父類初始化區塊");
}
public Parent() {
System.out.println("父類構造");
}
}(oid; ) {
new Parent();
//new Parent();
}
}
父類別成員變數 父類別初始化區塊 父類別建構 /* 若釋放第二行 父類別初始化區塊 父類別建構單一類別順序: ①靜態(成員,區塊) > 非靜態(成員,區塊) > 建構
」。
③靜態成員或區塊屬於類別的,因此優先初始化,且只會初始化一次。
④則已執行。
二、繼承類別的初始化順序
class SubClass extends Parent {
static String staticStr = "子類別靜態變數"; static {
System.out.println(staticStr);
System.out.println("子類別靜態初始化區塊");
}
.System.out.println("子類別初始化區塊");
}
public SubClass() {
System.out.print SubClass() {
〜}I. static void main(String[] args) {
System.out.println("子類別main方法");
new SubClass();
}類別靜態初始化區塊
子類別靜態變數
子類別靜態初始化區塊
父類初始化區塊
父類別建構
初始化區塊
子類別建構
繼承類別順序:
類別非靜態(成員,區塊)>靜態(成員和區塊)先於父類別的非靜態(成員和區塊),因為靜態是屬於類別的;對於非靜態和構造,自然是父類別中全部載入完畢,再載入子類別。