From Gossip@caterpillar

Java Gossip: break、continue

break可以離開目前switchforwhile、do while的區塊,並前進至區塊後下一個陳述句,在switch中主要用來結束陳述句進行至下一個case的比對,在for、while與do while中,主要用於中斷目前的迴圈執行,break的例子之前看過不少,這邊不再舉例。

continue的作用與break類似,主要使用於迴圈,所不同的是break會結束區塊的執行,而continue只會結束接下來區塊中的陳述句,並跳回迴圈區塊的開頭繼續下一個迴圈,而不是離開迴圈,例如:
for(int i = 1; i < 10; i++) {
    if(i == 5)
        break;
 
    System.ut.println("i = " + i);
}

這段程式會顯示i = 1到4,因為當 i 等於5時就會執行break而離開迴圈,再看下面這個程式:
for(int i = 1; i < 10; i++) {
    if(i == 5)
        continue;
 
    System.out.println("i = " + i);
}

這段程式會顯示1到4,與6到9,當 i 等於5時,會執行continue直接結束此次迴圈,這次迴圈System.out.println()該行並沒有被執行,然後從區塊開頭頭執行下一次迴圈,所以5並沒有被顯示。

break與continue還可以配合標籤使用,例如本來break只會離開for迴圈,設定標籤與scope,則可以離開整個scope,舉個簡單的例子:

  • BreakTest.java
public class BreakTest { 
public static void main(String[] args) {
back : {
for(int i = 0; i < 10; i++) {
if(i == 9) {
System.out.println("break");
break back;
}
}
System.out.println("test");
}
}
}

back是個標籤,當break back;時,返回至back標籤處,之後整個back區塊不執行而跳過,所以這個程式System.out.println("test");不會被執行。

事實上continue也有類似的用法,只不過標籤只能設定在for之前,例如:

  • ContinueTest.java
public class ContinueTest { 
public static void main(String[] args) {
back1:
for(int i = 0; i < 10; i++){
back2:
for(int j = 0; j < 10; j++) {
if(j == 9) {
continue back1;
}
}
System.out.println("test");
}
}
}

continue配合標籤,可以自由的跳至任何一層for迴圈,您可以試試continue back1與continue back2的不同,設定back1時,System.out.println("test");不會被執行。