全面理解初始化順序

2021-04-17 23:17:17 字數 856 閱讀 7233

例子:

classa

static

publica()

public

string

test()

public

static

intgetnum()//它只屬於a

}classbextendsa

static

publicb()   

public

string

test()//覆蓋

public

static

intgetnum()//它只屬於b,不能覆蓋

}public

classinittest }

首先在載入類時初始化static變數,同時按定義的順序執行static{}塊;

然後初始化按定義的順序初始化非static變數;

最後執行建構函式;

以上的每個步驟都是先執行父類部分,再執行子類部分;

附:我的理解

總而言之:先靜(變數+塊+方法,三者不分先後,按照在**中出現的順序初始化);後非(變數+塊+函式+建構函式,同樣不分先後,按照在**中出現的順序初始化)。以上均先執行父類再執行子類。

注意的是,靜態xx只初始化一次,所以我們得到了第二次new b()的結果。

初始化順序

上次面試碰到一面試題,雖然知道但是感覺還是有必要記錄下來,利己利民,題目是關於初始化順序的,也許對很多初學者還是有點用處的。閒話不多說,先上 package initialseq public class parent public parent public int method package ...

初始化順序

在類的內部,變數定義的順序決定了初始化的順序.即使變數定義散布於方法定義之間,它們仍會在任何方法呼叫之前得到初始化.無論建立多少個物件,靜態資料只占用乙份儲存區域.靜態變數初始化只有在必要時才會執行,比如有類table,如果不建立table物件也不引用table的靜態方法,那麼類table的靜態變數...

初始化順序

初始化,記憶體模型,成員變數,靜態變數,區域性變數,方法 初始化順序,靜態變數 按照類中定義的順序,先父後子 成員變數 按照類中定義的順序 建構函式 其他方法。建立物件時構造器的呼叫順序是 先初始化靜態成員 先父後子 初始化父類成員變數,然後呼叫父類構造器,再初始化自己成員變數,最後呼叫自身構造器。...