java中有四種代碼塊
創(chuàng)新互聯(lián)公司成立于2013年,先為寧安等服務(wù)建站,寧安等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢(xún)服務(wù)。為寧安企業(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問(wèn)題。
1.普通代碼塊:直接在{}中出現(xiàn)的。
2.構(gòu)造代碼塊:在構(gòu)造函數(shù)的{}中出現(xiàn)的。
3.靜態(tài)代碼塊:static{}中出現(xiàn)的。
4.同步代碼塊:多線程中出現(xiàn)。
靜態(tài)初始化塊:當(dāng)類(lèi)第一次加載時(shí)執(zhí)行。
非靜態(tài)初始化塊:非靜態(tài)初始化塊會(huì)在構(gòu)造函數(shù)執(zhí)行時(shí),且在構(gòu)造函數(shù)主體代碼執(zhí)行之前被執(zhí)行。
區(qū)別如下:
1、執(zhí)行次數(shù)不同
靜態(tài)塊只執(zhí)行一次,初始化塊可以執(zhí)行多次。
2、作用不同
靜態(tài)初始化塊僅能初始化類(lèi)變量,即static修飾的數(shù)據(jù)成員。
非靜態(tài)初始化塊可以初始化類(lèi)的實(shí)例變量。
擴(kuò)展資料:
使用Java靜態(tài)代碼塊注意事項(xiàng):
1、它是隨著類(lèi)的加載而執(zhí)行,只執(zhí)行一次,并優(yōu)先于主函數(shù)。具體說(shuō),靜態(tài)代碼塊是由類(lèi)調(diào)用的。類(lèi)調(diào)用時(shí),先執(zhí)行靜態(tài)代碼塊,然后才執(zhí)行主函數(shù)的。
2、靜態(tài)代碼塊其實(shí)就是給類(lèi)初始化的,而構(gòu)造代碼塊是給對(duì)象初始化的。
3、靜態(tài)代碼塊中的變量是局部變量,與普通函數(shù)中的局部變量性質(zhì)沒(méi)有區(qū)別。
4、一個(gè)類(lèi)中可以有多個(gè)靜態(tài)代碼塊。
5、對(duì)于靜態(tài)變量、靜態(tài)初始化塊、變量、初始化塊、構(gòu)造器,它們的初始化順序依次是(靜態(tài)變量、靜態(tài)初始化塊)(變量、初始化塊)構(gòu)造器。
java邏輯代碼塊是指使用{}大括號(hào)內(nèi)的代碼片段,為了實(shí)現(xiàn)某種邏輯和主類(lèi)區(qū)分開(kāi)來(lái)的一段代碼。分為靜態(tài)代碼塊、普通代碼塊,示例如下:
/**
*?靜態(tài)代碼塊先于構(gòu)造器執(zhí)行?普通塊先于構(gòu)造塊??只執(zhí)行一次
*?凡是靜態(tài)的與對(duì)象無(wú)關(guān),先于對(duì)象存在的;?凡是靜態(tài)的都是共享的
*
*/
public?class?Test?{
static?{//靜態(tài)代碼塊
System.out.println("static");
}
{
System.out.println("普通塊2");
}
public?Test()?{
System.out.println("構(gòu)造器");
}
靜態(tài)代碼塊:只要一用到某個(gè)類(lèi),那么這個(gè)類(lèi)的靜態(tài)代碼塊就先執(zhí)行,比如:
public class Dog(){
int i = 0;
static {
i = 1;
}
public Dog(){
i = 2;
}
}當(dāng)你new 一個(gè)Dog()對(duì)象時(shí),首先i=
1 會(huì)執(zhí)行,然后才執(zhí)行
public Dog(){}這個(gè)方法。
pulic
Dog() 是與類(lèi)同名、沒(méi)有返回值的方法,也就是構(gòu)造方法。
構(gòu)造方法的作用是用來(lái)初始化一個(gè)對(duì)象的。比如你可以在里面寫(xiě)
i
=
2;
那么當(dāng)你 Dog
d
=
new
Dog()執(zhí)行這段代碼的時(shí)候,是這樣的:
首先
i
=
;
然后執(zhí)行static 靜態(tài)代碼塊,此時(shí)i=
1;
最后執(zhí)行public
Dog();
i
=
2;
Java靜態(tài)代碼塊的作用:Java靜態(tài)代碼塊中的代碼會(huì)在類(lèi)加載JVM時(shí)運(yùn)行,且只被執(zhí)行一次,也就是說(shuō)這些代碼不需要實(shí)例化類(lèi)就能夠被調(diào)用。一般情況下,如果有些代碼必須在項(xiàng)目啟動(dòng)的時(shí)候就執(zhí)行的時(shí)候,就需要使用靜態(tài)代碼塊。
Java靜態(tài)代碼塊的用法:一個(gè)類(lèi)可以使用不包含在任何方法體中的靜態(tài)代碼塊,當(dāng)類(lèi)被載入時(shí),靜態(tài)代碼塊被執(zhí)行,且只被執(zhí)行一次,靜態(tài)塊常用來(lái)執(zhí)行類(lèi)屬性的初始化。例如:
static
{
int
a=0;
}
//構(gòu)造塊:直接在類(lèi)中定義且沒(méi)有加static關(guān)鍵字的代碼塊稱(chēng)為{}構(gòu)造代碼塊。構(gòu)造代碼塊在創(chuàng)建對(duì)象時(shí)被調(diào)用,每次創(chuàng)建對(duì)象都會(huì)被調(diào)用,并且構(gòu)造代碼塊的執(zhí)行次序優(yōu)先于類(lèi)構(gòu)造函數(shù)。\x0d\x0a\x0d\x0apublic class CodeBlock02\x0d\x0a{\x0d\x0a\x0d\x0a {\x0d\x0a\x0d\x0a System.out.println("第一代碼塊");\x0d\x0a \x0d\x0a }\x0d\x0a\x0d\x0apublic CodeBlock02(){\x0d\x0a System.out.println("構(gòu)造方法");\x0d\x0a }\x0d\x0a \x0d\x0a {\x0d\x0a\x0d\x0a System.out.println("第二構(gòu)造塊");\x0d\x0a }\x0d\x0a public static void main(String[] args){\x0d\x0a new CodeBlock02();\x0d\x0a new CodeBlock02();\x0d\x0a new CodeBlock02();\x0d\x0a \x0d\x0a }\x0d\x0a} \x0d\x0a\x0d\x0a/**\x0d\x0a執(zhí)行結(jié)果:\x0d\x0a第一代碼塊\x0d\x0a第二構(gòu)造塊\x0d\x0a構(gòu)造方法\x0d\x0a第一代碼塊\x0d\x0a第二構(gòu)造塊\x0d\x0a構(gòu)造方法\x0d\x0a第一代碼塊\x0d\x0a第二構(gòu)造塊\x0d\x0a構(gòu)造方法*/