父子類初始化的順序2

2021-06-19 01:41:53 字數 991 閱讀 1096

class

x x()

}class

y y()

}public

class

z extends

x y y

=new

y();//9、這裡是子類成員變數初始化

z()

public

static

void

main(string args) }

執行結果:

static y

ystatic x父類靜態**塊yy

static zyx

yz解釋:static的東西在編譯的時候就向記憶體要到了訪問空間,他們的初始化要早於非static,順序是先父類再子類。

初始化類,先執行super()父類的的建構函式(final和static之後),父類的建構函式先執行super()直到object super(),完了執行一般成員變數的初始化

一般成員變數初始化完畢,執行構造器裡面的**(super()之後的**).

父類的初始化完成後(子類構造器裡面super執行完畢),才輪到子類的成員變數初始化

子類成員變數初始化完畢,開始執行子類構造器裡面的**(super()之後的**).

注意:靜態塊和靜態變數的呼叫順序是按照書寫順序執行的,比如上邊x類中靜態塊和靜態變數的書寫順序顛倒如下:

class x

static y sb= new y();

x()

}則執行結果為:

static x父類靜態**塊

static yyy

ystatic zyx

yz最後:確定變數空間和初始化賦值是分開進行的,先一次性確定靜態成員變數空間 並賦給二進位制0 ,然後按照書寫順序逐一賦值

如下**,輸出結果是0.0

public

class

test

static

intf()

}

父類,子類初始化 2

載入類時,先父類靜態,再子類靜態,然後是子類中main方法,main方法中如果有生成子類物件的語句,先找到子類建構函式,因為每個子類建構函式裡頭都會有super語句 jdk預設或者自己提供,且預設在建構函式中第一行 則先初始化父類非靜態,然後父類構造,再然後是子類非靜態,子類建構函式 除super之...

Java中父類 子類初始化順序

測試結果 父類靜態 塊 子類靜態 塊 父類成員變數初始化parent common block test 父類有參構造方法ppp 子類成員變數初始化son common block test 子類有參構造方法ppp sss 靜態 塊只能生成一次 父類成員變數初始化parent common bloc...

初始化順序

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