3 回答

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

TA貢獻1801條經驗 獲得超16個贊
您可以使用帶標簽的BREAK語句:
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;
}
}
}
但是,在正確設計的代碼中,您不需要GOTO功能。
添加回答
舉報