單獨乙個類的場景下,初始化順序為依次為 靜態變數和靜態**塊(看兩者的書寫順序),繼承的基類的建構函式,成員變數,被呼叫的建構函式。
**呈現:
public
class
test
}class
sonpublic
son(
int age)
private height height =
newheight
(1.8f);
static
public
static gender gender =
newgender
(true);
}class
height
}class
gender
else
}}
this is static code
this is a male.
initializing height 1.8 meters.
this is son.
稍微修改一下**,新增兩個基類,讓son繼承father, father繼承grandpa。
繼承的情況就比較複雜了。由於繼承了基類,還將往上回溯,遞迴地呼叫基類的無參構造方法。
在我們的例子中,在初始化靜態資料後,會先往上追溯,呼叫father的預設構造方法,此時再往上追溯到grandpa的預設構造方法。
注:如果在子類的構造方法中,顯式地呼叫了父類的帶參構造方法,那麼jvm將呼叫指定的構造方法而非預設構造方法。
基類和子類均有靜態資料,成員變數和構造方法的場景
我們繼續修改**,讓其最終呈現如下:
public
class
test
}class
grandpa
public
grandpa
(int age)
private height height =
newheight
(1.5f);
public
static gender gender =
newgender
(true
,"grandpa");
static
}class
father
extends
grandpa
public
father
(int age)
private height height =
newheight
(1.6f);
public
static gender gender =
newgender
(true
,"father");
}class
sonextends
father
public
son(
int age)
private height height =
newheight
(1.8f);
public
static gender gender =
newgender
(true
,"son");
}class
height
}class
gender
else
}public
gender
(boolean ismale, string identify)
else
}}
grandpa is a male.
this is static code
father is a male.
son is a male.
initializing height 1.5 meters.
this is grandpa.
initializing height 1.6 meters.
father is 50 years old.
initializing height 1.8 meters.
this is son.
在我們的示例中,載入順序應該是這樣的:
grandpa 靜態資料
father 靜態資料
son 靜態資料
grandpa 成員變數
grandpa 構造方法
father 成員變數
father 構造方法
son 成員變數
son 構造方法
一般來說,順序如下:
1.首先是父類的靜態變數和靜態**塊(看兩者的書寫順序);
2.第二執行子類的靜態變數和靜態**塊(看兩者的書寫順序);
3.第三執行父類的成員變數賦值
4.第四執行父類類的構造**塊
5.第五執行父類的構造方法
6.執行子類的構造**塊
7.第七執行子類的構造方法
總結,也就是說雖然客戶端**是new 的構造方法,但是構造方法確實是在整個例項建立中的最後乙個呼叫。
先靜態:具體是先父靜態》子靜態。
先父後子:先父的全部,然後後子的全部。
優先順序:父類》子類,靜態**塊》非靜態**塊》建構函式(與位置前後無關係)
Java類的例項化順序
類的例項化順序,比如父類靜態資料,建構函式,字段,子類靜態資料,建構函式,字段,他們的執行順序 先靜態 先父後子 先靜態 父靜態 子靜態 優先順序 父類 子類 靜態 塊 非靜態 塊 建構函式 乙個類的例項化過程 1,父類中的static 塊,子類的static 2,順序執行父類的普通 塊 3,父類的...
java 子類例項化後子類 父類各語句執行順序
解決問題 子類例項化後子類 父類語句誰先執行?條件 父類 子類各有屬性string型別的name 子類重寫父類printinfo 方法 實現 class animal public void printinfo public class t extends animal public static ...
解讀類載入 類初始化與例項化
要理解類載入和類初始化,必須了解類的生命週期,類的生命週期可簡要概括為五個階段,即載入 連線 初始化 使用 銷毀五個階段。類載入通常指類生命週期的前三個階段 載入階段 載入階段就是把經過編譯後的位元組碼檔案載入進記憶體,即把類資訊載入進jvm的方法區中,並在堆中建立乙個class物件,來作為類資訊的...