Java 之關(guān)鍵字 continue ,break

$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)。由此也引出了一個有趣的問題:通過限制語句的能力,反而能使一項語言特性更加有用。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • goto語句一直被人所詬病,說它使得代碼結(jié)構(gòu)復(fù)雜化,但是語言設(shè)計者們還是沒有放棄goto這個功能強(qiáng)大的語句。Jav...
    craneyuan閱讀 1,253評論 0 2
  • 一、順序結(jié)構(gòu) 代碼在執(zhí)行過程中如果沒有控制語句,代碼就會一句一句的執(zhí)行下去,直到結(jié)束。 二、選擇結(jié)...
    堅持也是一種成功閱讀 681評論 1 5
  • 很多事兒在你沒親身體會之前,你是不會明白的。我說說我媽媽的事情,我媽是一個非常節(jié)約的人,到現(xiàn)在快50歲的人了還一直...
    凨馬閱讀 186評論 0 1
  • 共享單車在天津投放了有一段時間了。我從起初看好OFO轉(zhuǎn)變到現(xiàn)在更看好摩拜。把自己的想法分享一下。 我騎的第一輛車是...
    超懷觀道閱讀 3,517評論 62 52
  • 不勞而哭 ...
    杞國巖泉閱讀 284評論 0 0