七、java靜態(tài)代碼塊與非靜態(tài)代碼塊

所謂的代碼塊就是一段獨立的代碼空間软驰,那什么是靜態(tài)代碼塊呢涧窒?說白了,靜態(tài)代碼塊就是用static修飾的代碼塊锭亏,關(guān)于靜態(tài)代碼塊的概念不多說纠吴,不過你需要知道它的一個特點,那就是

隨著類的加載而執(zhí)行慧瘤,而且只執(zhí)行一次

用代碼驗證靜態(tài)代碼塊隨著類的加載而執(zhí)行戴已,且執(zhí)行一次

class StaticDemo{

//靜態(tài)代碼塊
static {
System.out.println("靜態(tài)代碼塊被執(zhí)行");
}

void show(){
System.out.println("方法被執(zhí)行");
}

}

public class StaticTest {

/**

  • 靜態(tài)代碼塊的特點:
  • 隨著類的加載而執(zhí)行固该,而且只執(zhí)行一次
    */

public static void main(String[] args){

new StaticDemo().show();
new StaticDemo().show();
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
執(zhí)行結(jié)果如下

由輸出結(jié)果我們可以看見,最先被打印的是靜態(tài)代碼塊的輸出內(nèi)容糖儡,這就說明在加載類的時候是先執(zhí)行了靜態(tài)代碼塊的內(nèi)容伐坏,隨后調(diào)用了類中的方法,當(dāng)再次創(chuàng)建實例調(diào)用方法的時候只有方法被調(diào)用了握联,而靜態(tài)代碼塊不再執(zhí)行斤讥,因此戚宦,靜態(tài)代碼塊的特點是隨著類的加載而執(zhí)行,而且只執(zhí)行一次岳掐!

與main函數(shù)的執(zhí)行順序
其實猜也猜得到靜態(tài)代碼塊是先于main函數(shù)執(zhí)行的鉴竭,不過始終是眼見為實静陈,讓我們來用代碼驗證一下吧退子!

public class StaticTest {

/**

  • 靜態(tài)代碼塊的特點:
  • 隨著類的加載而執(zhí)行瘸味,而且只執(zhí)行一次
  • 靜態(tài)代碼塊的執(zhí)行順序優(yōu)先于main函數(shù)
    */

static {

System.out.println("a");
}

public static void main(String[] hq){

System.out.println("b");
}

}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
我們看執(zhí)行結(jié)果,輸出如下

代碼驗證結(jié)果依然是靜態(tài)代碼塊優(yōu)先于main函數(shù)執(zhí)行蜒犯,其實這是必然的组橄,因為靜態(tài)代碼塊是隨著類的加載而執(zhí)行。

為了讓你我都更明白靜態(tài)代碼塊的執(zhí)行情況罚随,接下來我們來一個稍微復(fù)雜點的,我們看看在繼承當(dāng)中的情況羽资,代碼如下

class StaticDemo{

//靜態(tài)代碼塊
static {
System.out.println("父類靜態(tài)代碼塊被執(zhí)行");
}
void show(){
System.out.println("父類方法被執(zhí)行");
}
}
public class StaticTest extends StaticDemo {

/**

  • 靜態(tài)代碼塊的特點:
  • 隨著類的加載而執(zhí)行淘菩,而且只執(zhí)行一次
  • 靜態(tài)代碼塊額執(zhí)行順序優(yōu)先于main函數(shù)
    */

static {

System.out.println("子類靜態(tài)代碼塊被執(zhí)行");
}

void show(){
System.out.println("子類方法被執(zhí)行");
}

public static void main(String[] hq){

System.out.println("main函數(shù)");
StaticTest staticTest = new StaticTest();

}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
我們先來看以上代碼,你能猜出以上代碼的運行結(jié)果是什么嗎屠升?還是先看下結(jié)果吧

和你想的一樣嗎潮改?我們知道靜態(tài)代碼塊的加載是隨著類的加載而執(zhí)行,當(dāng)執(zhí)行main函數(shù)之前腹暖,StaticTest這個類被加載汇在,而這個類又是繼承自StaticDemo,因此會最先執(zhí)行StaticDemo中的靜態(tài)代碼塊脏答,然后再執(zhí)行StaticTest中的靜態(tài)代碼塊糕殉,最后再執(zhí)行main函數(shù)中的輸出語句。

接下來我們再加上構(gòu)造方法和非靜態(tài)代碼塊殖告,接下來的代碼希望你能經(jīng)嘲⒌看看,那么靜態(tài)代碼塊這塊就足夠了黄绩。

class StaticDemo{

//靜態(tài)代碼塊
static {
System.out.println("父類靜態(tài)代碼塊被執(zhí)行");
}

//非靜態(tài)代碼塊
{
System.out.println("父類非靜態(tài)代碼塊被執(zhí)行");
}
//構(gòu)造方法
StaticDemo(){

System.out.println("父類構(gòu)造方法被執(zhí)行");
}
}
public class StaticTest extends StaticDemo {

/**

  • 靜態(tài)代碼塊的特點:
  • 隨著類的加載而執(zhí)行羡洁,而且只執(zhí)行一次
  • 靜態(tài)代碼塊額執(zhí)行順序優(yōu)先于main函數(shù)
    */
    static {

System.out.println("子類靜態(tài)代碼塊被執(zhí)行");
}
//非靜態(tài)代碼塊
{
System.out.println("子類非靜態(tài)代碼塊被執(zhí)行");
}
StaticTest(){
System.out.println("子類構(gòu)造方法被執(zhí)行");
}

public static void main(String[] hq){
System.out.println("main函數(shù)");
new StaticTest();
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
你猜猜以上代碼執(zhí)行之后的輸出結(jié)果是什么?我們來看最終的運行結(jié)果

總結(jié)
通過以上輸出我們能總結(jié)出什么呢爽丹?

總結(jié):靜態(tài)代碼塊會隨著類的加載而執(zhí)行筑煮,而且只執(zhí)行一次辛蚊。當(dāng)new StaticTest()開始執(zhí)行的時候會先去執(zhí)行父類中的靜態(tài)代碼塊,然后再執(zhí)行子類中的靜態(tài)代碼塊真仲,當(dāng)所有的靜態(tài)代碼塊都執(zhí)行結(jié)束后會執(zhí)行main函數(shù)中的輸出語句(前提是輸出語句在new StaticTest()之前)嚼隘,然后會去執(zhí)行父類中的非靜態(tài)代碼塊,接著是父類中的構(gòu)造方法袒餐,緊接著執(zhí)行子類中的非靜態(tài)代碼塊飞蛹,最后是子類中的構(gòu)造方法,完事灸眼!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末卧檐,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子焰宣,更是在濱河造成了極大的恐慌霉囚,老刑警劉巖,帶你破解...
    沈念sama閱讀 223,002評論 6 519
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件匕积,死亡現(xiàn)場離奇詭異盈罐,居然都是意外死亡,警方通過查閱死者的電腦和手機闪唆,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,357評論 3 400
  • 文/潘曉璐 我一進店門盅粪,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人悄蕾,你說我怎么就攤上這事票顾。” “怎么了帆调?”我有些...
    開封第一講書人閱讀 169,787評論 0 365
  • 文/不壞的土叔 我叫張陵奠骄,是天一觀的道長。 經(jīng)常有香客問我番刊,道長含鳞,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,237評論 1 300
  • 正文 為了忘掉前任芹务,我火速辦了婚禮蝉绷,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘锄禽。我一直安慰自己潜必,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 69,237評論 6 398
  • 文/花漫 我一把揭開白布沃但。 她就那樣靜靜地躺著磁滚,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上垂攘,一...
    開封第一講書人閱讀 52,821評論 1 314
  • 那天维雇,我揣著相機與錄音,去河邊找鬼晒他。 笑死吱型,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的陨仅。 我是一名探鬼主播津滞,決...
    沈念sama閱讀 41,236評論 3 424
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼灼伤!你這毒婦竟也來了触徐?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 40,196評論 0 277
  • 序言:老撾萬榮一對情侶失蹤狐赡,失蹤者是張志新(化名)和其女友劉穎撞鹉,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體颖侄,經(jīng)...
    沈念sama閱讀 46,716評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡鸟雏,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,794評論 3 343
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了览祖。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片孝鹊。...
    茶點故事閱讀 40,928評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖穴墅,靈堂內(nèi)的尸體忽然破棺而出惶室,到底是詐尸還是另有隱情,我是刑警寧澤玄货,帶...
    沈念sama閱讀 36,583評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站悼泌,受9級特大地震影響松捉,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜馆里,卻給世界環(huán)境...
    茶點故事閱讀 42,264評論 3 336
  • 文/蒙蒙 一隘世、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧鸠踪,春花似錦丙者、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,755評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春纷捞,著一層夾襖步出監(jiān)牢的瞬間痢虹,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,869評論 1 274
  • 我被黑心中介騙來泰國打工主儡, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留奖唯,地道東北人。 一個月前我還...
    沈念sama閱讀 49,378評論 3 379
  • 正文 我出身青樓糜值,卻偏偏與公主長得像丰捷,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子寂汇,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,937評論 2 361

推薦閱讀更多精彩內(nèi)容

  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法病往,類相關(guān)的語法,內(nèi)部類的語法健无,繼承相關(guān)的語法荣恐,異常的語法,線程的語...
    子非魚_t_閱讀 31,669評論 18 399
  • 廢話不多說累贤,自己進入今天的主題 1叠穆、面向?qū)ο蟮奶卣饔心男┓矫妫?答:面向?qū)ο蟮奶卣髦饕幸韵聨讉€方面: - 抽象:...
    傳奇內(nèi)服號閱讀 2,357評論 1 31
  • 世上的人舍棄了五感,遍尋大徹大悟 果真能通透嗎臼膏? 你的五感減弱了硼被,你也永遠失去了本真 你不知道這是怎么了,問周圍的...
    少俠不是蝦閱讀 1,935評論 0 0
  • 聽朋友的推薦渗磅,新購進了兩本新書《小狗錢錢1嚷硫、2》,這兩本書是非常不錯了的始鱼,本書的主人公是小姑娘吉婭和她可愛的小狗錢...
    陽陽_0ff5閱讀 178評論 0 0
  • 打卡第一天20171004: 1:越花越有的功課對于收紅包仔掸,發(fā)紅包,買菜医清,公司進賬起暮,出賬都做了功課。 2:感恩:感...
    若水之城閱讀 231評論 0 0