Java的“Goto”與標簽及使用詳解
goto在Java中是一個保留字,但在語言中并沒有用到它;Java沒有g(shù)oto。但是,Java也能完成一些類似于跳轉(zhuǎn)的操作,主要是依靠:標簽。
為什么要使用標簽
在迭代語句中,我們可以使用break和continue來中斷當前循環(huán)。但如果出現(xiàn)循環(huán)嵌套的情況,使用break和continue只能中斷內(nèi)層循環(huán),無法控制到外層的循環(huán)。這時,我們就可以使用標簽結(jié)合break和continue,中斷內(nèi)層循環(huán),跳轉(zhuǎn)到標簽所在的地方。
標簽聲明
標簽的聲明很簡單,加個冒號就行,就像下面這樣:
label1:
標簽使用
在Java中,標簽起作用的唯一地方是在迭代語句之前,注意“唯一”,也就是說不能在其它地方單獨使用,只能結(jié)合迭代語句共同使用。
下面這個例子展示了帶標簽的break以及continue語句在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)開始----------------"); 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é)果可以看出
當i==1時,執(zhí)行continue后,沒有執(zhí)行“內(nèi)層循環(huán)結(jié)束”打印語句,而是打印了“i=2”,說明continue使執(zhí)行點回到內(nèi)層循環(huán)起始處,并繼續(xù)下一次迭代。
當i==3時,執(zhí)行continue label1后,沒有執(zhí)行“內(nèi)層循環(huán)結(jié)束”打印語句,也沒有執(zhí)行“外層循環(huán)結(jié)束”,而是打印了“外層循環(huán)開始”,說明帶標簽的continue,對內(nèi)外層循環(huán)都起作用,continue label1同時中斷內(nèi)外層循環(huán),直接跳轉(zhuǎn)到label1標簽處,隨后,從外部循環(huán)開始下一次的迭代。
當i==5時,執(zhí)行break后,沒有執(zhí)行“內(nèi)層循環(huán)結(jié)束”,但執(zhí)行了“外層循環(huán)結(jié)束”,說明break只中斷并跳出內(nèi)層循環(huán),回到了外層循環(huán)中。
當i==7時,執(zhí)行break label1后,直接打印了“End”,說明帶標簽的break,對內(nèi)外層循環(huán)都起作用,break label1同時中斷內(nèi)外層循環(huán),直接跳轉(zhuǎn)到label1標簽處,但并不重新進入迭代。也就是說,break label1完全終止了兩個循環(huán)。
總結(jié)
1.一般的continue只會對其所在的循環(huán)起作用,退回循環(huán)的開頭,并繼續(xù)執(zhí)行。
2.帶標簽的continue會使執(zhí)行點到達標簽的位置,并重新進入緊接在標簽后的循環(huán)。
3.一般的break會中斷并跳出當前循環(huán)。
4.帶標簽的break會中斷并跳出標簽所指的循環(huán)。
5.在Java中,標簽起作用的唯一地方是在迭代語句之前。
6.在Java中,使用標簽的唯一理由是有嵌套循環(huán)存在,并且想從多層嵌套中break或continue。
相關(guān)文章
解決Mybatis-plus和pagehelper依賴沖突的方法示例
這篇文章主要介紹了解決Mybatis-plus和pagehelper依賴沖突的方法示例,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-04-04java+SpringBoot設(shè)計實現(xiàn)評教系統(tǒng)
這篇文章主要介紹了用過Java SpringBoot實現(xiàn)一個簡單的評價系統(tǒng),可以做到學(xué)生管理、教師管理、評教管理、指標管理、課程管理等。感興趣的可以了解一下2021-12-12Atomikos + MybatisPlus解決多數(shù)據(jù)源事務(wù)一致性問題解決
在實際項目的開發(fā)過程中,我們經(jīng)常會遇到在同一個項目或微服務(wù)中牽涉到使用兩個或多個數(shù)據(jù)源的,本文主要介紹了Atomikos + MybatisPlus解決多數(shù)據(jù)源事務(wù)一致性問題解決,具有一定的參考價值,感興趣的可以了解一下2024-07-07idea中MavenWeb項目不能創(chuàng)建Servlet的解決方案
這篇文章主要介紹了idea中MavenWeb項目不能創(chuàng)建Servlet的解決方案,本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下2020-02-02使用arthas命令redefine實現(xiàn)Java熱更新(推薦)
今天分享一個非常重要的命令 redefine ,主要作用是加載外部的 .class 文件,用來替換 JVM 已經(jīng)加載的類,總結(jié)起來就是實現(xiàn)了 Java 的熱更新,感興趣的朋友跟隨小編一起看看吧2020-05-05詳解SpringBoot Mybatis如何對接多數(shù)據(jù)源
這篇文章主要為大家介紹了SpringBoot Mybatis如何對接多數(shù)據(jù)源實現(xiàn)方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-09-09