1. 程式人生 > >break、continue關鍵字配合標籤使用,實現跳轉功能

break、continue關鍵字配合標籤使用,實現跳轉功能

知識點:continue和break配合標籤實現跳轉功能

      儘管java中goto是一個保留字,但在語言中並未使用它,Java沒有goto。然後java也可以完成一些類似於跳轉的操作,那就是將break和continue配合標籤一起使用

標籤是後面跟有冒號的識別符號,就像下面這樣:

lable1:

      在java中,標籤起作用的唯一地方剛好是在迭代語句之前。“剛好之前”的意思表明,在標籤和迭代之間置入任何語句都不好。而在迭代之前設定標籤的唯一理由是:我們希望在其中巢狀另一個迭代或者一個開關。這是由於break和continue關鍵字通常只中斷當前迴圈,但若隨同標籤一起使用,它們就會中斷迴圈,直到標籤所在的地方:

下面是標籤用於for迴圈的例子:

複製程式碼
public class LabledFor{
    public static void main(String[] args){
        int i = 0;
        outer:
            for(;true;){
                inner:
                    for(;i<10;i++){
                        System.out.println("i="+i);
                        /**在抵達for迴圈的末尾之前,遞增表示式會執行
*/ if(i==2){ System.out.println("continue"); continue; } /**break會中斷for迴圈,而且在抵達for迴圈的末尾之前,遞增表示式不會執行。由於 * break跳過了增量表達式,所以在此處直接對i進行遞增操作*/ if
(i==3){ System.out.println("break"); i++; break; } /**continue outer語句會跳到迴圈頂部,而且也會跳過inner標籤下的for迴圈的遞增, * 所以這裡也對i直接遞增*/ if(i==7){ System.out.println("continue outer"); i++; continue outer; } if(i==8){ System.out.println("break outer"); break outer; } /**在抵達inner標籤下的for迴圈末尾之前,inner下的for迴圈的遞增表示式會執行*/ for(int k = 0;k< 5;k++){ if(k==3){ System.out.println("continue inner"); continue inner; } } } } } }
複製程式碼

輸出:

continue inner
i=1
continue inner
i=2
continue
i=3
break
i=4
continue inner
i=5
continue inner
i=6
continue inner
i=7
continue outer
i=8
break outer

      如果沒有break outer語句,就沒有辦法從內部迴圈裡跳出外部迴圈。這是由於break本身只能中斷最內層的迴圈(continue也是同樣如此)。

下面的例子展示了帶標籤的break以及continue語句在while迴圈中的用法:

複製程式碼
public class LabledWhile{
    public static void main(String[] args){
        int i = 0;
        outer:
            while(true){
                System.out.println("Outer while loop");
                while(true){
                    i++;
                    System.out.println("i="+i);
                    if(i==1){
                        System.out.println("continue");
                        continue;
                    }
                    if(i==3){
                        System.out.println("continue outer");
                        continue outer;
                    }
                    if(i==5){
                        System.out.println("break");
                        break;
                    }
                    if(i==7){
                        System.out.println("break outer");
                        break outer;
                    }
                }
            }
    }
}
複製程式碼

輸出:

Outer while loop
i=1
continue
i=2
i=3
continue outer
Outer while loop
i=4
i=5
break
Outer while loop
i=6
i=7
break outer

同樣的規則亦適用於while:

1、一般的continue會退回最內層迴圈的開頭(頂部),並繼續執行

2、帶標籤的continue會達到標籤的位置,並重新進入緊接在那個標籤後面的迴圈

3、一般的break會中斷並跳出當前迴圈

4、帶標籤的break會中斷並跳出標籤所指的迴圈