$break: 只能用在switch語句或者循環(huán)語句當(dāng)中,除此之外不能單獨應(yīng)用,否則編譯的時 候會報錯;
$continue: 它的應(yīng)用范圍要比break小一層,有且只能用在循環(huán)語句當(dāng)中,continue跳回到循環(huán)的頂部。
舉個thingking in java 的例子:
<pre>
public class LabeledFor {public static void main(String[] args) {
int i = 0;outer: // Can't have statements herefor(; true ;) { // infinite loop
inner: // Can't have statements herefor(; i < 10; i++) {
prt("i = " + i);if(i == 2) {
prt("continue");
continue;}
if(i == 3) {prt("break");i++; // Otherwise i never
// gets incremented.break;
}if(i == 7) {
prt("continue outer");i++; // Otherwise i never// gets incremented.
continue outer;}
if(i == 8) {prt("break outer");
break outer;}
for(int k = 0; k < 5; k++) {if(k == 3) {
prt("continue inner");
continue inner;}
}}
}// Can't break or continue// to labels here
}static void prt(String s) {
System.out.println(s);}
}
</pre>
這里用到了在其他例子中已經(jīng)定義的 prt()方法。注意break會中斷for循環(huán),而且在<strong>抵達(dá)for循環(huán)的末尾之前,遞增表達(dá)式不會執(zhí)行</strong>。由于break跳過了遞增表達(dá)式,所以遞增會在i==3 的情況下直接執(zhí)行。在 i==7 的情況下,continue outer 語句也會到達(dá)循環(huán)頂部,而且也會跳過遞增,所以它也是直接遞增的。
<pre><strong>備注:</strong> 關(guān)于帶標(biāo)簽的break和continue
Java 中的標(biāo)簽是為循環(huán)設(shè)計的,是為了在多重循環(huán)中方便的使用 break 和 coutinue 而設(shè)計的。正是由于這個原因,Java 的標(biāo)簽只能定義在三種循環(huán) (for() {}, do{} while(), while() {}) 的開始位置,否則編譯器會報告說找不到標(biāo)簽。
在循環(huán)前面加上標(biāo)簽,就好像給循環(huán)起了個名字。而后在循環(huán)中使用 break 或者 continue 語句的時候,就可以帶上這個標(biāo)簽做為參數(shù),指明跳出 (break) 或者繼續(xù) (continue) 哪一個循環(huán),如“break mylabel;”、“continue mylabel;”。</pre>
如果沒有break outer語句,就沒有辦法在一個內(nèi)部循環(huán)里找到出外部循環(huán)的路徑。這是由于break本身只能中斷最內(nèi)層的循環(huán)(對于continue 同樣如此)。當(dāng)然,若想在中斷循環(huán)的同時退出方法,簡單地用一個return 即可。下面這個例子向大家展示了帶標(biāo)簽的break以及continue語句在while循環(huán)中的用法:
<pre>
public class LabeledWhile {public static void main(String[] args) {
int i = 0;outer:while(true) {
prt("Outer while loop");while(true) {
i++;prt("i = " + i);if(i == 1) {
prt("continue");
continue;}
if(i == 3) {prt("continue outer");continue outer;
}if(i == 5) {
prt("break");
break;}
if(i == 7) {prt("break outer");
90
break outer;}
}}
}static void prt(String s) {
System.out.println(s);}
}
</pre>
同樣的規(guī)則亦適用于while:(1) 簡單的一個 continue 會退回最內(nèi)層循環(huán)的開頭(頂部),并繼續(xù)執(zhí)行。(2) 帶有標(biāo)簽的 continue 會到達(dá)標(biāo)簽的位置,并重新進(jìn)入緊接在那個標(biāo)簽后面的循環(huán)。(3) break 會中斷當(dāng)前循環(huán),并移離當(dāng)前標(biāo)簽的末尾。(4) 帶標(biāo)簽的break會中斷當(dāng)前循環(huán),并移離由那個標(biāo)簽指示的循環(huán)的末尾。這個方法的輸出結(jié)果是一目了然的:
大家要記住的<strong>重點</strong>是:在Java 里唯一需要用到標(biāo)簽的地方就是擁有嵌套循環(huán),而且想中斷或繼續(xù)多個嵌套級別的時候。在Dijkstra的“Goto有害”論中,他最反對的就是標(biāo)簽,而非goto。隨著標(biāo)簽在一個程序里數(shù)量的增多,他發(fā)現(xiàn)產(chǎn)生錯誤的機(jī)會也越來越多。標(biāo)簽和goto 使我們難于對程序作靜態(tài)分析。這是由于它們在程序的執(zhí)行流程中引入了許多“怪圈”。但幸運的是,Java 標(biāo)簽不會造成這方面的問題,因為它們的活動場所已被限死,不可通過特別的方式到處傳遞程序的控制權(quán)。由此也引出了一個有趣的問題:通過限制語句的能力,反而能使一項語言特性更加有用。