初始化順序問題

2021-07-11 02:57:47 字數 1574 閱讀 9449

public

class initdemo

// 初始化塊

// 構造器

public

initdemo()

public

static

void

main(string args)

}

靜態變數

靜態初始化塊

變數初始化塊

構造器

public

class parent

// 初始化塊

// 構造器

public

parent()

}

public

class

child

extends

parent

// 初始化塊

// 構造器

public

child()

// 程式入口

public

static

void

main(string args)

}

父類--

靜態變數父類-

-靜態初始化塊子類-

-靜態變數子類-

-靜態初始化塊父類-

-變數父類-

-初始化塊父類-

-構造器子類-

-變數子類-

-初始化塊子類-

-構造器

可知,不是父類完全初始化完畢後才進行子類的初始化,實際上子類的靜態變數和靜態初始化塊的初始化是在父類的變數、初始化塊和構造器初始化之前就完成了。

public

class initdemo

// 靜態變數

public

static testb b = new testb();

public

static

void

main(string args)

}class testa

} class testb

}

靜態變數a

靜態初始化塊

靜態變數b

改變位置:

// 靜態變數 

public

static testb b = new testb();

// 靜態初始化塊

static

// 靜態變數

public

static testa a = new testa();

再次執行結果:

靜態變數b

靜態初始化塊

靜態變數a

發現輸出結果隨著它們在類中出現的前後順序而改變,這就說明靜態變數和靜態初始化塊是依照他們在類中的定義順序進行初始化的。同樣,變數和初始化塊也遵循這個規律。

類初始化順序問題

public class test02 public test02 public static void main string args 執行 結果如下 由此可見 靜態變數 靜態初始化塊 變數 初始化塊 構造器 2 繼承關係下的初始化順序 class parent public parent pu...

初始化順序

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

初始化順序

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