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