更新時(shí)間:2021-05-07 12:23:03 來(lái)源:動(dòng)力節(jié)點(diǎn) 瀏覽1093次
普通代碼塊
定義:在方法、循環(huán)、判斷等語(yǔ)句中出現(xiàn)的代碼塊
修飾:只能用標(biāo)簽修飾
位置:普通代碼塊可以出現(xiàn)在方法體內(nèi)除"()"外的任何地方,包括 方法體,代碼塊中(即可以嵌套在代碼塊中)
執(zhí)行:普通代碼依賴方法的執(zhí)行而執(zhí)行,按照正常的先后順序執(zhí)行
作用:將多行代碼封裝在一起,實(shí)現(xiàn)特定的功能。(有點(diǎn)廢話)
注意:無(wú)
靜態(tài)代碼塊
定義:在類中定義使用static修飾的代碼塊
修飾:使用static修飾
位置:它不能出現(xiàn)在方法體或者代碼塊內(nèi)
執(zhí)行:在加載類時(shí)會(huì)先執(zhí)行靜態(tài)代碼塊,且只執(zhí)行一次,如果有多個(gè)靜態(tài)代碼塊則按照先后順序執(zhí)行
作用:一般用于靜態(tài)變量的初始化,創(chuàng)建對(duì)象前的環(huán)境的加載
注意:靜態(tài)代碼塊中不能直接訪問(wèn)非靜態(tài)變量和方法,需要通過(guò)類的實(shí)例對(duì)象來(lái)訪問(wèn)
同步代碼塊
定義:可以簡(jiǎn)單地認(rèn)為同步代碼塊是使用 synchronized 修飾的普通代碼塊
位置:同普通代碼塊
執(zhí)行:同普通代碼塊
作用:用于多線程環(huán)境的同步保護(hù)
注意:注意同步代碼塊使用不當(dāng)可能會(huì)造成“死鎖”
構(gòu)造代碼塊
定義:在類中定義且沒(méi)有加任何修飾的代碼塊
位置:它不能出現(xiàn)在方法體或者其他代碼塊內(nèi)
執(zhí)行:依賴于構(gòu)造函數(shù)的調(diào)用而執(zhí)行
作用:初始化實(shí)例變量和實(shí)例環(huán)境,一般用于提取類構(gòu)造函數(shù)中的公共代碼
注意:構(gòu)造代碼塊不是在構(gòu)造函數(shù)之前執(zhí)行的?。。【幾g器在編譯的時(shí)候會(huì)把構(gòu)造代碼塊插入到每個(gè)構(gòu)造函數(shù)的最前面??!
構(gòu)造代碼塊隨著構(gòu)造函數(shù)的執(zhí)行而執(zhí)行!!
如果某個(gè)構(gòu)造函數(shù)調(diào)用了其他的構(gòu)造函數(shù),那么構(gòu)造代碼塊不會(huì)插入到該構(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)造代碼塊確實(shí)被插入到了構(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)造代碼塊確實(shí)被插入到了無(wú)參構(gòu)造函數(shù)最前面,而調(diào)用了無(wú)參構(gòu)造函數(shù)的有參構(gòu)造函數(shù)沒(méi)有被插入構(gòu)造代碼塊。
以上就是動(dòng)力節(jié)點(diǎn)小編介紹的"Java代碼塊詳解"的內(nèi)容,希望對(duì)大家有幫助,如有疑問(wèn),請(qǐng)?jiān)诰€咨詢,有專業(yè)老師隨時(shí)為您服務(wù)。
Java實(shí)驗(yàn)班
0基礎(chǔ) 0學(xué)費(fèi) 15天面授
Java就業(yè)班
有基礎(chǔ) 直達(dá)就業(yè)
Java夜校直播班
業(yè)余時(shí)間 高薪轉(zhuǎn)行
Java在職加薪班
工作1~3年,加薪神器
Java架構(gòu)師班
工作3~5年,晉升架構(gòu)
提交申請(qǐng)后,顧問(wèn)老師會(huì)電話與您溝通安排學(xué)習(xí)