java 初始化块
【0】README
0.1) 本文描述+源代碼均 轉(zhuǎn)自 core java volume 1, 旨在分享初始化塊 or 靜態(tài)初始化塊的調(diào)用過程;
【1】初始化塊相關
1.1)前面講過了 兩種初始化數(shù)據(jù)域的方法: 在構(gòu)造器中設置值 + 在聲明中賦值;
1.2)java還有第3種機制, 稱為初始化塊: 在一個類的聲明中, 可以包含多個代碼塊,
對以上代碼的分析(Analysis)
- A1)無論使用哪一個構(gòu)造器構(gòu)造對象, id 域 都在對象初始化塊占用被初始化。首先運行初始化塊, 然后才運行構(gòu)造器的主體部分;
- A2)這種機制不是必須的, 也不常見;通常 直接將 初始化代碼放在構(gòu)造器中;
Annotation)即使在類的后面定義,仍然可以在初始化塊中設置域, 這個規(guī)則的復雜性足以使 編譯器的實現(xiàn)者頭痛 , 因此建議將初始化塊放在域定義之后;
【2】看荔枝
【3】總結(jié)下調(diào)用構(gòu)造器的具體步驟:
- step1)所有數(shù)據(jù)域被初始化為默認值(0、false、null);
- step2)按照在類聲明中出現(xiàn)的次序, 依次執(zhí)行所有域初始化語句和初始化塊;
- step3)如果構(gòu)造器第一行調(diào)用了第二個構(gòu)造器, 則執(zhí)行第二個構(gòu)造器主體;
- step4)執(zhí)行這個構(gòu)造器主體;
【4】可以通過提供一個初始化值, 或者使用一個靜態(tài)的初始化塊來對靜態(tài)域進行初始化
- 4.1)第一種機制為: private static int nextId = 1;
- 4.2)引入靜態(tài)初始化塊:也可以使用靜態(tài)初始化塊對靜態(tài)域進行初始化, 將代碼放在一個塊中, 并標記關鍵字 static:
總結(jié)
- 上一篇: 静态方法+工厂方法(静态方法用途)
- 下一篇: 韩国烧酒怎么喝 有什么方法