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 ...