javap進(jìn)行反編譯
- jdk提供了一個開發(fā)工具(jdk/bin/javap.exe)供我們進(jìn)行反編譯。
javap使用格式:
javap -c -l -private 類名
各參數(shù)功能如下:
javap.png
構(gòu)造函數(shù)
- 當(dāng)類中沒有顯示構(gòu)造函數(shù)時,編譯程序,Java編譯器會自動生成一個隱式無參數(shù)構(gòu)造函數(shù),而此構(gòu)造函數(shù)的權(quán)限修飾符與該類的權(quán)限修飾符相同。
構(gòu)造代碼塊
- 當(dāng)帶參數(shù)的構(gòu)造函數(shù)和不帶參數(shù)的構(gòu)造函數(shù)有相同的實(shí)現(xiàn)需求時,為了避免代碼重復(fù),可以引用構(gòu)造代碼塊,并將構(gòu)造函數(shù)要實(shí)現(xiàn)功能的代碼寫進(jìn)構(gòu)造代碼塊。
構(gòu)造代碼塊:
- 構(gòu)造代碼塊作用:給對象進(jìn)行統(tǒng)一初始化。
- 構(gòu)造函數(shù)作用:給對應(yīng)的對象進(jìn)行初始化。
構(gòu)造代碼塊的格式:
...數(shù)據(jù)成員;
{
構(gòu)造代碼塊
}
構(gòu)造函數(shù)或方法...
代碼塊的類別:
- 構(gòu)造代碼塊
- 局部代碼塊--大括號位于方法之內(nèi)。作用:縮短局部變量的生命周期,節(jié)省一點(diǎn)內(nèi)存。
- 靜態(tài)代碼塊
構(gòu)造代碼塊要注意的事項(xiàng):
- Java編譯器編譯一個Java源文件時,會把成員變量的聲明語句提前至一個類的最前端。
- 成員變量的初始化工作都在構(gòu)造函數(shù)中執(zhí)行。
- 一旦經(jīng)過Java編譯器編譯狗,那么構(gòu)造代碼塊的代碼就會被移動到構(gòu)造函數(shù)中執(zhí)行,并放于構(gòu)造函數(shù)代碼之前,即是在構(gòu)造函數(shù)之前執(zhí)行的。
例如:在一個類Demo中有如下①②③號三段代碼
1號 int i = 100; //數(shù)據(jù)成員初始化
2號 { i = 200; } //構(gòu)造代碼塊內(nèi)賦值
3號 public Demo() { i = 300;} //構(gòu)造函數(shù)對數(shù)據(jù)成員賦值
無論三段代碼先后順序如何,當(dāng)new出一個實(shí)例并輸出該實(shí)例的i值時都為300。
4.成員變量的顯示初始化與構(gòu)造代碼塊的是按照當(dāng)前代碼順序執(zhí)行的。
當(dāng)只有1號和2號代碼時,按代碼的前后順序執(zhí)行。后執(zhí)行的值覆蓋先執(zhí)行的值。