您好,登錄后才能下訂單哦!
如何理解Java代碼塊,針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。
靜態代碼塊
靜態方法只可以調用靜態成員不可以調用非靜態成員
沒有this對象
非靜態方法既可以調用非靜態成員也可以調用靜態成員
靜態代碼塊作用域:在類的內部方法外,使用static修飾
public class CodeBlock { static{ System.out.println("這是靜態代碼塊"); }}
什么時候執行: 靜態代碼塊在類被加載的時候就運行了,而且只運行一次,并且優先于各種代碼塊以及構造函數。如果一個類中有多個靜態代碼塊,會按照書寫順序依次執行
靜態代碼塊是否可以訪問方法?這個問題需要從上面的靜態方法來解答,靜態代碼塊是可以調用靜態方法,但是無法調用非靜態方法
靜態代碼塊是否可以放在方法體?這個是不可以的,即使是靜態方法也是不可以放靜態代碼塊的,且靜態代碼塊是只能放在類內部,無法放在靜態方法內部,因為靜態塊是加載類的時候就執行,而靜態方法是需要調用才執行,這里是有沖突的。
作用域:存在方法中
public static void main (String[] args){ { int number = 1; } System.out.println(number);//異常}
局部代碼塊執行順序是和普通語句一樣,只不過區分的是在代碼塊中的變量無法在代碼塊外部調用,如上所示,輸出number時異常,這樣有效的控制變量的生命周期,及早釋放提高內存使用率。
public class CodeBlock { { System.out.println("這是構造代碼塊"); }}
同步代碼塊作用域:在方法內部,用synchronized修飾的代碼塊
public class CodeBlock {
public void syncMethod(Object obj){
synchronized (obj){
}
}
}
synchronized實質上是一個鎖,為什么需要用鎖?當有多條線程同時訪問共享數據時,會發生資源搶占,如果不進行處理那么有可能會出現每個線程獲取到的數據都是不正確的,這里我們可以使用同步方法或者同步代碼塊,當一個線程進來時,我們需要把其他線程擋在外面,直到這個線程使用完后才讓其他線程使用該資源。
public class CodeBlock {
static{
System.out.println("靜態代碼塊");
}
{
System.out.println("構造代碼塊");
}
public CodeBlock(){
System.out.println("無參構造函數");
}
public void sayHello(){
{
System.out.println("局部代碼塊");
}
}
public static void main(String[] args) {
System.out.println("執行了main方法");
new CodeBlock().sayHello();;
}
}
靜態代碼塊執行了main方法構造代碼塊無參構造函數局部代碼塊
關于如何理解Java代碼塊問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。