父子類以及static的載入順序

2022-09-09 20:06:19 字數 553 閱讀 7253

static可以被寫在變數和**塊上,此時該變數和**塊不屬於物件,而屬於類,會在jvm執行類載入機制時的準備階段就被賦值以及執行,而非static的變數和**塊在初始化階段才會被賦值並執行。

因此如果問靜態方法能否呼叫非靜態變數,答案是不能,因為後者在前者執行時還沒有初始化。

通過結果,可以看到父子類的初始化過程:

先從父類的靜態成員進行初始化的,靜態成員包括靜態變數和靜態**塊。

然後初始化子類的靜態成員。

然後是父類的普通成員變數,包括**普通成員和**塊。『

再然後是父類的建構函式。

最後是子類的普通成員變數和子類的建構函式。

看到這裡我才發現,原來子類的建構函式是最後才初始化。而且,父類的成員變數和父類的建構函式初始化順序是緊挨著的。

更詳細的理解得深入jvm

Java父子類載入順序

先上桌結論 父類靜態屬性 成員變數 父類靜態 塊 子類靜態屬性 子類靜態 塊 父類非靜態屬性 父類非靜態 塊 父類構造器 子類非靜態屬性 子類非靜態 塊 子類構造器 這麼長怎麼記呀?靜態屬性和 塊,當且僅當該類在程式中第一次被 new 或者第一次被類載入器呼叫時才會觸發 不考慮永久代的 也正是因為上...

父子類構造呼叫特點以及this關鍵字

子類程式 package cn.dali.code16 構造方法 作用 對類的成員變數進行初始化,注意不是物件的成員變數而是類的成員變數進行初始化後 交給物件,進入堆內。父子類構造方法的訪問特點 1.若子類構造方法沒有手動呼叫父類構造方法,則編譯器會自動生成乙個super 也就是父類 無參構造方法 ...

父子類生成的順序3

規律是這樣的 任何乙個類,在執行乙個方法前必須要先安 的順序初始化所有的靜態塊,然後呼叫main函式,在生成乙個類物件的時候,父類物件必須先生成,沒有父類哪有什麼子類。對於屬性的呼叫來說,哪個類呼叫的就是哪個的屬性。對於方法來說 非靜態方法,並且父類中有,子類中也有,物件是有子類生成的,那麼這個時候...