Java的“Goto”與標簽


goto在Java中是一個保留字,但在語言中並沒有用到它;Java沒有goto。但是,Java也能完成一些類似於跳轉的操作,主要是依靠:標簽

為什么要使用標簽

在迭代語句中,我們可以使用break和continue來中斷當前循環。但如果出現循環嵌套的情況,使用break和continue只能中斷內層循環,無法控制到外層的循環。這時,我們就可以使用標簽結合break和continue,中斷內層循環,跳轉到標簽所在的地方。

標簽聲明

標簽的聲明很簡單,加個冒號就行,就像下面這樣:

label1:

標簽使用

在Java中,標簽起作用的唯一地方是在迭代語句之前,注意“唯一”,也就是說不能在其它地方單獨使用,只能結合迭代語句共同使用。

下面這個例子展示了帶標簽的break以及continue語句在while循環中的用法:

/**
 * @author zouqingfeng
 */
public class GotoLabelTest {
    public static void main(String[] args) {
        int i = 0;
        label1: while (true) {
            System.out.println("----------------外層循環開始----------------");
            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("----------------內層循環結束----------------");
            }
            System.out.println("----------------外層循環結束----------------");
        }
        System.out.println("End");
        /* Output:
            ----------------外層循環開始----------------
            i=1
            continue
            i=2
            ----------------內層循環結束----------------
            i=3
            continue label1
            ----------------外層循環開始----------------
            i=4
            ----------------內層循環結束----------------
            i=5
            break
            ----------------外層循環結束----------------
            ----------------外層循環開始----------------
            i=6
            ----------------內層循環結束----------------
            i=7
            break label1
            End

         */        
    }
}

 從打印的結果可以看出

當i==1時,執行continue后,沒有執行“內層循環結束”打印語句,而是打印了“i=2”,說明continue使執行點回到內層循環起始處,並繼續下一次迭代。

當i==3時,執行continue label1后,沒有執行“內層循環結束”打印語句,也沒有執行“外層循環結束”,而是打印了“外層循環開始”,說明帶標簽的continue,對內外層循環都起作用,continue label1同時中斷內外層循環,直接跳轉到label1標簽處,隨后,從外部循環開始下一次的迭代。

當i==5時,執行break后,沒有執行“內層循環結束”,但執行了“外層循環結束”,說明break只中斷並跳出內層循環,回到了外層循環中。

當i==7時,執行break label1后,直接打印了“End”,說明帶標簽的break,對內外層循環都起作用,break label1同時中斷內外層循環,直接跳轉到label1標簽處,但並不重新進入迭代。也就是說,break label1完全終止了兩個循環。

總結

  1. 一般的continue只會對其所在的循環起作用,退回循環的開頭,並繼續執行。
  2. 帶標簽的continue會使執行點到達標簽的位置,並重新進入緊接在標簽后的循環。
  3. 一般的break會中斷並跳出當前循環。
  4. 帶標簽的break會中斷並跳出標簽所指的循環。
  5. 在Java中,標簽起作用的唯一地方是在迭代語句之前。
  6. 在Java中,使用標簽的唯一理由是有嵌套循環存在,並且想從多層嵌套中break或continue。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM