$break: 只能用在switch語句或者循環(huán)語句當(dāng)中,除此之外不能單獨(dú)應(yīng)用,否則編譯的時(shí) 候會(huì)報(bào)錯(cuò);
$continue: 它的應(yīng)用范圍要比break小一層具钥,有且只能用在循環(huán)語句當(dāng)中,continue跳回到循環(huán)的頂部。
舉個(gè)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會(huì)中斷for循環(huán)骂删,而且在<strong>抵達(dá)for循環(huán)的末尾之前,遞增表達(dá)式不會(huì)執(zhí)行</strong>四啰。由于break跳過了遞增表達(dá)式宁玫,所以遞增會(huì)在i==3 的情況下直接執(zhí)行。在 i==7 的情況下柑晒,continue outer 語句也會(huì)到達(dá)循環(huán)頂部欧瘪,而且也會(huì)跳過遞增,所以它也是直接遞增的匙赞。
<pre><strong>備注:</strong> 關(guān)于帶標(biāo)簽的break和continue
Java 中的標(biāo)簽是為循環(huán)設(shè)計(jì)的佛掖,是為了在多重循環(huán)中方便的使用 break 和 coutinue 而設(shè)計(jì)的妖碉。正是由于這個(gè)原因,Java 的標(biāo)簽只能定義在三種循環(huán) (for() {}, do{} while(), while() {}) 的開始位置芥被,否則編譯器會(huì)報(bào)告說找不到標(biāo)簽欧宜。
在循環(huán)前面加上標(biāo)簽,就好像給循環(huán)起了個(gè)名字拴魄。而后在循環(huán)中使用 break 或者 continue 語句的時(shí)候冗茸,就可以帶上這個(gè)標(biāo)簽做為參數(shù),指明跳出 (break) 或者繼續(xù) (continue) 哪一個(gè)循環(huán)匹中,如“break mylabel;”夏漱、“continue mylabel;”。</pre>
如果沒有break outer語句顶捷,就沒有辦法在一個(gè)內(nèi)部循環(huán)里找到出外部循環(huán)的路徑麻蹋。這是由于break本身只能中斷最內(nèi)層的循環(huán)(對(duì)于continue 同樣如此)。當(dāng)然焊切,若想在中斷循環(huán)的同時(shí)退出方法扮授,簡單地用一個(gè)return 即可。下面這個(gè)例子向大家展示了帶標(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) 簡單的一個(gè) continue 會(huì)退回最內(nèi)層循環(huán)的開頭(頂部)专肪,并繼續(xù)執(zhí)行刹勃。(2) 帶有標(biāo)簽的 continue 會(huì)到達(dá)標(biāo)簽的位置,并重新進(jìn)入緊接在那個(gè)標(biāo)簽后面的循環(huán)嚎尤。(3) break 會(huì)中斷當(dāng)前循環(huán)荔仁,并移離當(dāng)前標(biāo)簽的末尾。(4) 帶標(biāo)簽的break會(huì)中斷當(dāng)前循環(huán)芽死,并移離由那個(gè)標(biāo)簽指示的循環(huán)的末尾乏梁。這個(gè)方法的輸出結(jié)果是一目了然的:
大家要記住的<strong>重點(diǎn)</strong>是:在Java 里唯一需要用到標(biāo)簽的地方就是擁有嵌套循環(huán),而且想中斷或繼續(xù)多個(gè)嵌套級(jí)別的時(shí)候关贵。在Dijkstra的“Goto有害”論中遇骑,他最反對(duì)的就是標(biāo)簽,而非goto揖曾。隨著標(biāo)簽在一個(gè)程序里數(shù)量的增多落萎,他發(fā)現(xiàn)產(chǎn)生錯(cuò)誤的機(jī)會(huì)也越來越多。標(biāo)簽和goto 使我們難于對(duì)程序作靜態(tài)分析炭剪。這是由于它們?cè)诔绦虻膱?zhí)行流程中引入了許多“怪圈”练链。但幸運(yùn)的是,Java 標(biāo)簽不會(huì)造成這方面的問題奴拦,因?yàn)樗鼈兊幕顒?dòng)場所已被限死媒鼓,不可通過特別的方式到處傳遞程序的控制權(quán)。由此也引出了一個(gè)有趣的問題:通過限制語句的能力,反而能使一項(xiàng)語言特性更加有用绿鸣。