日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > java >内容正文

java

java continue goto_Java中goto和break、continue实现区别

發(fā)布時間:2025/3/11 java 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java continue goto_Java中goto和break、continue实现区别 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

goto 關(guān)鍵字很早就在程序設(shè)計語言中出現(xiàn)。事實上,goto 是匯編語言的程序控制結(jié)構(gòu)的始祖:“若條件 A,

則跳到這里;否則跳到那里”。若閱讀由幾乎所有編譯器生成的匯編代碼,就會發(fā)現(xiàn)程序控制里包含了許多

跳轉(zhuǎn)。然而,goto 是在源碼的級別跳轉(zhuǎn)的,所以招致了不好的聲譽。若程序總是從一個地方跳到另一個地

方,還有什么辦法能識別代碼的流程呢?隨著 Edsger Dijkstra 著名的“Goto 有害”論的問世,goto 便從此

失寵。

事實上,真正的問題并不在于使用 goto ,而在于 goto 的濫用。而且在一些少見的情況下,goto 是組織控制

流程的最佳手段。

盡管 goto 仍是 Java 的一個保留字,但并未在語言中得到正式使用;Java 沒有 goto 。然而,在 break 和

continue 這兩個關(guān)鍵字的身上,我們?nèi)匀荒芸闯鲆恍?goto 的影子。它并不屬于一次跳轉(zhuǎn),而是中斷循環(huán)語

句的一種方法。之所以把它們納入 goto 問題中一起討論,是由于它們使用了相同的機制:標(biāo)簽。

“標(biāo)簽”是后面跟一個冒號的標(biāo)識符,就象下面這樣:

label1:

對 Java 來說,唯一用到標(biāo)簽的地方是在循環(huán)語句之前。進(jìn)一步說,它實際需要緊靠在循環(huán)語句的前方——在

標(biāo)簽和循環(huán)之間置入任何語句都是不明智的。而在循環(huán)之前設(shè)置標(biāo)簽的唯一理由是:我們希望在其中嵌套另

一個循環(huán)或者一個開關(guān)。這是由于 break 和 continue 關(guān)鍵字通常只中斷當(dāng)前循環(huán),但若隨同標(biāo)簽使用,它們

就會中斷到存在標(biāo)簽的地方。如下所示:

label1:

外部循環(huán){

內(nèi)部循環(huán){

//...

break; //1

//...

continue; //2

//...

continue label1; //3

//...

break label1; //4

}

}

在條件 1 中,break 中斷內(nèi)部循環(huán),并在外部循環(huán)結(jié)束。在條件 2 中,continue 移回內(nèi)部循環(huán)的起始處。但

在條件 3 中,continue label1 卻同時中斷內(nèi)部循環(huán)以及外部循環(huán),并移至 label1 處。隨后,它實際是繼續(xù)

循環(huán),但卻從外部循環(huán)開始。在條件 4 中,break label1 也會中斷所有循環(huán),并回到 label1 處,但并不重

新進(jìn)入循環(huán)。也就是說,它實際是完全中止了兩個循環(huán)。

下面是 for 循環(huán)的一個例子:

// : LabeledFor.java

// Java’s "labeled for loop"

public class LabeledFor {

public static void main(String[] args) {

int i = 0;

outer: // Can't have statements here

for (; true;) { // infinite loop

inner: // Can't have statements here

for (; 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);

}

}

這里用到了在其他例子中已經(jīng)定義的 prt()方法。

注意 break 會中斷 for 循環(huán),而且在抵達(dá) for 循環(huán)的末尾之前,遞增表達(dá)式不會執(zhí)行。由于 break 跳過了遞

增表達(dá)式,所以遞增會在 i==3 的情況下直接執(zhí)行。在 i==7 的情況下,continue outer 語句也會到達(dá)循環(huán)頂

部,而且也會跳過遞增,所以它也是直接遞增的。

下面是輸出結(jié)果:

i = 0

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 語句,就沒有辦法在一個內(nèi)部循環(huán)里找到出外部循環(huán)的路徑。這是由于 break 本身只

能中斷最內(nèi)層的循環(huán)(對于 continue 同樣如此)。

當(dāng)然,若想在中斷循環(huán)的同時退出方法,簡單地用一個 return 即可。

下面這個例子向大家展示了帶標(biāo)簽的 break 以及 continue 語句在 while 循環(huán)中的用法:

//: LabeledWhile.java//Java's "labeled while" loop

public classLabeledWhile {public static voidmain(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");continueouter;

}if (i == 5) {

prt("break");break;

}if (i == 7) {

prt("break outer");breakouter;

}

}

}

}static voidprt(String s) {

System.out.println(s);

}

}///:~

同樣的規(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é)果是一目了然的:

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

大家要記住的重點是:在 Java 里唯一需要用到標(biāo)簽的地方就是擁有嵌套循環(huán),而且想中斷或繼續(xù)多個嵌套級

別的時候。

在 Dijkstra 的“Goto 有害”論中,他最反對的就是標(biāo)簽,而非 goto 。隨著標(biāo)簽在一個程序里數(shù)量的增多,

他發(fā)現(xiàn)產(chǎn)生錯誤的機會也越來越多。標(biāo)簽和 goto 使我們難于對程序作靜態(tài)分析。這是由于它們在程序的執(zhí)行

流程中引入了許多“怪圈”。但幸運的是,Java 標(biāo)簽不會造成這方面的問題,因為它們的活動場所已被限

死,不可通過特別的方式到處傳遞程序的控制權(quán)。由此也引出了一個有趣的問題:通過限制語句的能力,反

而能使一項語言特性更加有用。

---------------------

作者:淡紫色呼吸

來源:CSDN

原文:https://blog.csdn.net/jinghuayuanli/article/details/16844765

總結(jié)

以上是生活随笔為你收集整理的java continue goto_Java中goto和break、continue实现区别的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。