更新時間:2021-05-07 12:23:03 來源:動力節(jié)點(diǎn) 瀏覽916次
普通代碼塊
定義:在方法、循環(huán)、判斷等語句中出現(xiàn)的代碼塊
修飾:只能用標(biāo)簽修飾
位置:普通代碼塊可以出現(xiàn)在方法體內(nèi)除"()"外的任何地方,包括 方法體,代碼塊中(即可以嵌套在代碼塊中)
執(zhí)行:普通代碼依賴方法的執(zhí)行而執(zhí)行,按照正常的先后順序執(zhí)行
作用:將多行代碼封裝在一起,實現(xiàn)特定的功能。(有點(diǎn)廢話)
注意:無
靜態(tài)代碼塊
定義:在類中定義使用static修飾的代碼塊
修飾:使用static修飾
位置:它不能出現(xiàn)在方法體或者代碼塊內(nèi)
執(zhí)行:在加載類時會先執(zhí)行靜態(tài)代碼塊,且只執(zhí)行一次,如果有多個靜態(tài)代碼塊則按照先后順序執(zhí)行
作用:一般用于靜態(tài)變量的初始化,創(chuàng)建對象前的環(huán)境的加載
注意:靜態(tài)代碼塊中不能直接訪問非靜態(tài)變量和方法,需要通過類的實例對象來訪問
同步代碼塊
定義:可以簡單地認(rèn)為同步代碼塊是使用 synchronized 修飾的普通代碼塊
位置:同普通代碼塊
執(zhí)行:同普通代碼塊
作用:用于多線程環(huán)境的同步保護(hù)
注意:注意同步代碼塊使用不當(dāng)可能會造成“死鎖”
構(gòu)造代碼塊
定義:在類中定義且沒有加任何修飾的代碼塊
位置:它不能出現(xiàn)在方法體或者其他代碼塊內(nèi)
執(zhí)行:依賴于構(gòu)造函數(shù)的調(diào)用而執(zhí)行
作用:初始化實例變量和實例環(huán)境,一般用于提取類構(gòu)造函數(shù)中的公共代碼
注意:構(gòu)造代碼塊不是在構(gòu)造函數(shù)之前執(zhí)行的!!!編譯器在編譯的時候會把構(gòu)造代碼塊插入到每個構(gòu)造函數(shù)的最前面!!
構(gòu)造代碼塊隨著構(gòu)造函數(shù)的執(zhí)行而執(zhí)行!!
如果某個構(gòu)造函數(shù)調(diào)用了其他的構(gòu)造函數(shù),那么構(gòu)造代碼塊不會插入到該構(gòu)造函數(shù)中以免構(gòu)造代碼塊執(zhí)行多次!
執(zhí)行案例
public class CodeAreaExecuteDemo{
static{
System.out.println("static code block!");
}
{
System.out.println("construct code block!");
}
public CodeAreaExecuteDemo(){
System.out.println("Constructor() ");
}
public static void main(String[] args) {
new CodeAreaExecuteDemo();
}
}
執(zhí)行結(jié)果
static code block!
construct code block!
Constructor()
反編譯結(jié)果
我們發(fā)現(xiàn)構(gòu)造代碼塊確實被插入到了構(gòu)造函數(shù)最前面中
構(gòu)造代碼塊與構(gòu)造函數(shù)關(guān)系的案例
public class ConstructorDemo{
public ConstructorDemo(){}
public ConstructorDemo(int num){
this();
}
{
System.out.println("construct code block!");
}
public static void main(String[] args) {
}
}
反編譯結(jié)果如下
我們發(fā)現(xiàn)構(gòu)造代碼塊確實被插入到了無參構(gòu)造函數(shù)最前面,而調(diào)用了無參構(gòu)造函數(shù)的有參構(gòu)造函數(shù)沒有被插入構(gòu)造代碼塊。
以上就是動力節(jié)點(diǎn)小編介紹的"Java代碼塊詳解"的內(nèi)容,希望對大家有幫助,如有疑問,請在線咨詢,有專業(yè)老師隨時為您服務(wù)。
初級 202925
初級 203221
初級 202629
初級 203743