goto在java中是一個(gè)保留字,但在語言中并沒有用到它;java沒有g(shù)oto。但是,java也能完成一些類似于跳轉(zhuǎn)的操作,主要是依靠:標(biāo)簽。
為什么要使用標(biāo)簽
在迭代語句中,我們可以使用break和continue來中斷當(dāng)前循環(huán)。但如果出現(xiàn)循環(huán)嵌套的情況,使用break和continue只能中斷內(nèi)層循環(huán),無法控制到外層的循環(huán)。這時(shí),我們就可以使用標(biāo)簽結(jié)合break和continue,中斷內(nèi)層循環(huán),跳轉(zhuǎn)到標(biāo)簽所在的地方。
標(biāo)簽聲明
標(biāo)簽的聲明很簡單,加個(gè)冒號就行,就像下面這樣:
label1:
標(biāo)簽使用
在java中,標(biāo)簽起作用的唯一地方是在迭代語句之前,注意“唯一”,也就是說不能在其它地方單獨(dú)使用,只能結(jié)合迭代語句共同使用。
下面這個(gè)例子展示了帶標(biāo)簽的break以及continue語句在while循環(huán)中的用法:
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
43
44
45
46
47
48
49
50
51
52
53
54
55
|
/** * @author zouqingfeng */ public class gotolabeltest { public static void main(string[] args) { int i = 0 ; label1: while ( true ) { system.out.println( "----------------外層循環(huán)開始----------------" ); while ( true ) { i++; system.out.println( "i=" + i); if (i == 1 ) { system.out.println( "continue" ); continue ; } if (i == 3 ) { system.out.println( "continue label1" ); continue label1; } if (i == 5 ) { system.out.println( "break" ); break ; } if (i == 7 ) { system.out.println( "break label1" ); break label1; } system.out.println( "----------------內(nèi)層循環(huán)結(jié)束----------------" ); } system.out.println( "----------------外層循環(huán)結(jié)束----------------" ); } system.out.println( "end" ); /* output: ----------------外層循環(huán)開始---------------- i=1 continue i=2 ----------------內(nèi)層循環(huán)結(jié)束---------------- i=3 continue label1 ----------------外層循環(huán)開始---------------- i=4 ----------------內(nèi)層循環(huán)結(jié)束---------------- i=5 break ----------------外層循環(huán)結(jié)束---------------- ----------------外層循環(huán)開始---------------- i=6 ----------------內(nèi)層循環(huán)結(jié)束---------------- i=7 break label1 end */ } } |
從打印的結(jié)果可以看出
當(dāng)i==1時(shí),執(zhí)行continue后,沒有執(zhí)行“內(nèi)層循環(huán)結(jié)束”打印語句,而是打印了“i=2”,說明continue使執(zhí)行點(diǎn)回到內(nèi)層循環(huán)起始處,并繼續(xù)下一次迭代。
當(dāng)i==3時(shí),執(zhí)行continue label1后,沒有執(zhí)行“內(nèi)層循環(huán)結(jié)束”打印語句,也沒有執(zhí)行“外層循環(huán)結(jié)束”,而是打印了“外層循環(huán)開始”,說明帶標(biāo)簽的continue,對內(nèi)外層循環(huán)都起作用,continue label1同時(shí)中斷內(nèi)外層循環(huán),直接跳轉(zhuǎn)到label1標(biāo)簽處,隨后,從外部循環(huán)開始下一次的迭代。
當(dāng)i==5時(shí),執(zhí)行break后,沒有執(zhí)行“內(nèi)層循環(huán)結(jié)束”,但執(zhí)行了“外層循環(huán)結(jié)束”,說明break只中斷并跳出內(nèi)層循環(huán),回到了外層循環(huán)中。
當(dāng)i==7時(shí),執(zhí)行break label1后,直接打印了“end”,說明帶標(biāo)簽的break,對內(nèi)外層循環(huán)都起作用,break label1同時(shí)中斷內(nèi)外層循環(huán),直接跳轉(zhuǎn)到label1標(biāo)簽處,但并不重新進(jìn)入迭代。也就是說,break label1完全終止了兩個(gè)循環(huán)。
總結(jié)
1.一般的continue只會(huì)對其所在的循環(huán)起作用,退回循環(huán)的開頭,并繼續(xù)執(zhí)行。
2.帶標(biāo)簽的continue會(huì)使執(zhí)行點(diǎn)到達(dá)標(biāo)簽的位置,并重新進(jìn)入緊接在標(biāo)簽后的循環(huán)。
3.一般的break會(huì)中斷并跳出當(dāng)前循環(huán)。
4.帶標(biāo)簽的break會(huì)中斷并跳出標(biāo)簽所指的循環(huán)。
5.在java中,標(biāo)簽起作用的唯一地方是在迭代語句之前。
6.在java中,使用標(biāo)簽的唯一理由是有嵌套循環(huán)存在,并且想從多層嵌套中break或continue。
原文鏈接:https://www.cnblogs.com/zouqf/p/9881968.html