Java的“Goto”與標(biāo)簽及使用詳解
goto在Java中是一個(gè)保留字,但在語(yǔ)言中并沒(méi)有用到它;Java沒(méi)有g(shù)oto。但是,Java也能完成一些類(lèi)似于跳轉(zhuǎn)的操作,主要是依靠:標(biāo)簽。
為什么要使用標(biāo)簽
在迭代語(yǔ)句中,我們可以使用break和continue來(lái)中斷當(dāng)前循環(huán)。但如果出現(xiàn)循環(huán)嵌套的情況,使用break和continue只能中斷內(nèi)層循環(huán),無(wú)法控制到外層的循環(huán)。這時(shí),我們就可以使用標(biāo)簽結(jié)合break和continue,中斷內(nèi)層循環(huán),跳轉(zhuǎn)到標(biāo)簽所在的地方。
標(biāo)簽聲明
標(biāo)簽的聲明很簡(jiǎn)單,加個(gè)冒號(hào)就行,就像下面這樣:
label1:
標(biāo)簽使用
在Java中,標(biāo)簽起作用的唯一地方是在迭代語(yǔ)句之前,注意“唯一”,也就是說(shuō)不能在其它地方單獨(dú)使用,只能結(jié)合迭代語(yǔ)句共同使用。
下面這個(gè)例子展示了帶標(biāo)簽的break以及continue語(yǔ)句在while循環(huán)中的用法:
/**
* @author zouqingfeng
*/
public class GotoLabelTest {
public static void main(String[] args) {
int i = 0;
label1: while (true) {
System.out.println("----------------外層循環(huán)開(kāi)始----------------");
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)開(kāi)始----------------
i=1
continue
i=2
----------------內(nèi)層循環(huán)結(jié)束----------------
i=3
continue label1
----------------外層循環(huán)開(kāi)始----------------
i=4
----------------內(nèi)層循環(huán)結(jié)束----------------
i=5
break
----------------外層循環(huán)結(jié)束----------------
----------------外層循環(huán)開(kāi)始----------------
i=6
----------------內(nèi)層循環(huán)結(jié)束----------------
i=7
break label1
End
*/
}
}
從打印的結(jié)果可以看出
當(dāng)i==1時(shí),執(zhí)行continue后,沒(méi)有執(zhí)行“內(nèi)層循環(huán)結(jié)束”打印語(yǔ)句,而是打印了“i=2”,說(shuō)明continue使執(zhí)行點(diǎn)回到內(nèi)層循環(huán)起始處,并繼續(xù)下一次迭代。
當(dāng)i==3時(shí),執(zhí)行continue label1后,沒(méi)有執(zhí)行“內(nèi)層循環(huán)結(jié)束”打印語(yǔ)句,也沒(méi)有執(zhí)行“外層循環(huán)結(jié)束”,而是打印了“外層循環(huán)開(kāi)始”,說(shuō)明帶標(biāo)簽的continue,對(duì)內(nèi)外層循環(huán)都起作用,continue label1同時(shí)中斷內(nèi)外層循環(huán),直接跳轉(zhuǎn)到label1標(biāo)簽處,隨后,從外部循環(huán)開(kāi)始下一次的迭代。
當(dāng)i==5時(shí),執(zhí)行break后,沒(méi)有執(zhí)行“內(nèi)層循環(huán)結(jié)束”,但執(zhí)行了“外層循環(huán)結(jié)束”,說(shuō)明break只中斷并跳出內(nèi)層循環(huán),回到了外層循環(huán)中。
當(dāng)i==7時(shí),執(zhí)行break label1后,直接打印了“End”,說(shuō)明帶標(biāo)簽的break,對(duì)內(nèi)外層循環(huán)都起作用,break label1同時(shí)中斷內(nèi)外層循環(huán),直接跳轉(zhuǎn)到label1標(biāo)簽處,但并不重新進(jìn)入迭代。也就是說(shuō),break label1完全終止了兩個(gè)循環(huán)。
總結(jié)
1.一般的continue只會(huì)對(duì)其所在的循環(huán)起作用,退回循環(huán)的開(kāi)頭,并繼續(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)簽起作用的唯一地方是在迭代語(yǔ)句之前。
6.在Java中,使用標(biāo)簽的唯一理由是有嵌套循環(huán)存在,并且想從多層嵌套中break或continue。
相關(guān)文章
Spring Boot產(chǎn)生環(huán)形注入的解決方案
這篇文章主要介紹了Spring Boot產(chǎn)生環(huán)形注入的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-09-09
SpringBoot 如何整合 ES 實(shí)現(xiàn) CRUD 操作
這篇文章主要介紹了SpringBoot 如何整合 ES 實(shí)現(xiàn) CRUD 操作,幫助大家更好的理解和使用springboot框架,感興趣的朋友可以了解下2020-10-10
Java實(shí)現(xiàn)五子棋(附詳細(xì)源碼)
這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)五子棋游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-03-03
spring boot+ redis 接口訪問(wèn)頻率限制的實(shí)現(xiàn)
這篇文章主要介紹了spring boot+ redis 接口訪問(wèn)頻率限制的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01
Spring boot集成redis lettuce代碼實(shí)例
這篇文章主要介紹了Spring boot集成redis lettuce代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-04-04
淺談Springboot下引入mybatis遇到的坑點(diǎn)
這篇文章主要介紹了Springboot下引入mybatis遇到的坑點(diǎn),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-08-08
java設(shè)計(jì)模式學(xué)習(xí)之簡(jiǎn)單工廠模式
這篇文章主要為大家詳細(xì)介紹了java設(shè)計(jì)模式學(xué)習(xí)之簡(jiǎn)單工廠模式,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-10-10
mybatis的dtd約束文件及配置文件xml自動(dòng)提示操作
這篇文章主要介紹了mybatis的dtd約束文件及配置文件xml自動(dòng)提示操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-12-12

