更新時間:2021-05-07 12:23:03 來源:動力節點 瀏覽892次
普通代碼塊
定義:在方法、循環、判斷等語句中出現的代碼塊
修飾:只能用標簽修飾
位置:普通代碼塊可以出現在方法體內除"()"外的任何地方,包括 方法體,代碼塊中(即可以嵌套在代碼塊中)
執行:普通代碼依賴方法的執行而執行,按照正常的先后順序執行
作用:將多行代碼封裝在一起,實現特定的功能。(有點廢話)
注意:無
靜態代碼塊
定義:在類中定義使用static修飾的代碼塊
修飾:使用static修飾
位置:它不能出現在方法體或者代碼塊內
執行:在加載類時會先執行靜態代碼塊,且只執行一次,如果有多個靜態代碼塊則按照先后順序執行
作用:一般用于靜態變量的初始化,創建對象前的環境的加載
注意:靜態代碼塊中不能直接訪問非靜態變量和方法,需要通過類的實例對象來訪問
同步代碼塊
定義:可以簡單地認為同步代碼塊是使用 synchronized 修飾的普通代碼塊
位置:同普通代碼塊
執行:同普通代碼塊
作用:用于多線程環境的同步保護
注意:注意同步代碼塊使用不當可能會造成“死鎖”
構造代碼塊
定義:在類中定義且沒有加任何修飾的代碼塊
位置:它不能出現在方法體或者其他代碼塊內
執行:依賴于構造函數的調用而執行
作用:初始化實例變量和實例環境,一般用于提取類構造函數中的公共代碼
注意:構造代碼塊不是在構造函數之前執行的!!!編譯器在編譯的時候會把構造代碼塊插入到每個構造函數的最前面!!
構造代碼塊隨著構造函數的執行而執行!!
如果某個構造函數調用了其他的構造函數,那么構造代碼塊不會插入到該構造函數中以免構造代碼塊執行多次!
執行案例
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();
}
}
執行結果
static code block!
construct code block!
Constructor()
反編譯結果
我們發現構造代碼塊確實被插入到了構造函數最前面中
構造代碼塊與構造函數關系的案例
public class ConstructorDemo{
public ConstructorDemo(){}
public ConstructorDemo(int num){
this();
}
{
System.out.println("construct code block!");
}
public static void main(String[] args) {
}
}
反編譯結果如下
我們發現構造代碼塊確實被插入到了無參構造函數最前面,而調用了無參構造函數的有參構造函數沒有被插入構造代碼塊。
以上就是動力節點小編介紹的"Java代碼塊詳解"的內容,希望對大家有幫助,如有疑問,請在線咨詢,有專業老師隨時為您服務。
0基礎 0學費 15天面授
有基礎 直達就業
業余時間 高薪轉行
工作1~3年,加薪神器
工作3~5年,晉升架構
提交申請后,顧問老師會電話與您溝通安排學習