3 回答

TA貢獻(xiàn)1818條經(jīng)驗(yàn) 獲得超8個(gè)贊
goto
Java中沒(méi)有直接等效的概念。有幾種構(gòu)造可以讓您完成經(jīng)典作品可以做的一些事情goto
。
該
break
和continue
語(yǔ)句,可以跳出一個(gè)塊的循環(huán)或switch語(yǔ)句。帶標(biāo)簽的語(yǔ)句,
break <label>
允許您從任意復(fù)合語(yǔ)句跳到給定方法(或初始化程序塊)內(nèi)的任何級(jí)別。如果標(biāo)記了循環(huán)語(yǔ)句,則可以
continue <label>
從內(nèi)部循環(huán)繼續(xù)進(jìn)行外部循環(huán)的下一次迭代。引發(fā)和捕獲異常可以使您(有效)跳出方法調(diào)用的多個(gè)級(jí)別。(但是,異常的代價(jià)相對(duì)較高,被認(rèn)為是進(jìn)行“常規(guī)”控制流程1的一種不好的方法。)
當(dāng)然有
return
。
這些Java構(gòu)造均不允許您在與當(dāng)前語(yǔ)句相同的嵌套級(jí)別上向后或分支到代碼中的某個(gè)點(diǎn)。它們都跳出一個(gè)或多個(gè)嵌套(作用域)級(jí)別,并且所有(除之外continue
)都向下跳。此限制有助于避免舊的BASIC,F(xiàn)ORTRAN和COBOL代碼2固有的goto“意大利面條代碼”綜合癥。
1-異常中最昂貴的部分是異常對(duì)象及其堆棧跟蹤的實(shí)際創(chuàng)建。如果確實(shí)需要將異常處理用于“常規(guī)”流控制,則可以預(yù)分配/重用異常對(duì)象,或者創(chuàng)建一個(gè)覆蓋該fillInStackTrace()
方法的自定義異常類。缺點(diǎn)是異常的printStackTrace()
方法不會(huì)為您提供有用的信息……如果您需要調(diào)用它們的話。
2-意大利面條式代碼綜合癥催生了結(jié)構(gòu)化編程方法,您在其中限制了對(duì)可用語(yǔ)言結(jié)構(gòu)的使用。這可以應(yīng)用于BASIC,F(xiàn)ortran和COBOL,但是需要謹(jǐn)慎和紀(jì)律。goto
完全擺脫掉是一個(gè)務(wù)實(shí)的更好解決方案。如果您以某種語(yǔ)言來(lái)保存它,總是會(huì)有一些小丑會(huì)濫用它。

TA貢獻(xiàn)1801條經(jīng)驗(yàn) 獲得超16個(gè)贊
您可以使用帶標(biāo)簽的BREAK語(yǔ)句:
search:
for (i = 0; i < arrayOfInts.length; i++) {
for (j = 0; j < arrayOfInts[i].length; j++) {
if (arrayOfInts[i][j] == searchfor) {
foundIt = true;
break search;
}
}
}
但是,在正確設(shè)計(jì)的代碼中,您不需要GOTO功能。
添加回答
舉報(bào)