[英]How to jump in java
我有這樣的代碼
public class Test
{
public static void main(String[] args)
{
continue s;
System.out.println("I am not supposed to print this");
s:
System.out.println("I am suppose to print this");
}
}
我得到錯誤
java: undefined label: s
怎么了 ?
在Java中不可能像這樣跳躍,唯一的跳躍方式是從循環,while和do。
閱讀@Heinzi的答案
2.2.6沒有更多的Goto語句
Java沒有goto語句 。 研究表明,goto被(誤用)的原因不只是“因為它存在”而被更多地使用。 取消goto導致語言的簡化-例如,在for語句的中間沒有關於goto效果的規則。 對大約100,000行C代碼的研究確定,大約90%的goto語句僅用於獲得擺脫嵌套循環的效果。 如上所述,多級中斷並繼續刪除了對goto語句的大部分需求。
Java中沒有“ goto”。 而“繼續”還有其他功能。 您可以在循環中使用“ continue”,例如:
class ContinueDemo {
public static void main(String[] args) {
String searchMe = "peter piper picked a " + "peck of pickled peppers";
int max = searchMe.length();
int numPs = 0;
for (int i = 0; i < max; i++) {
// interested only in p's
if (searchMe.charAt(i) != 'p')
continue;
// process p's
numPs++;
}
System.out.println("Found " + numPs + " p's in the string.");
}
}
在上面的示例中,例如,如果searchMe.charAt(5) != 'p'
則循環將從i = 6和numPs++;
的循環開始處繼續numPs++;
將不會被處理。
您可以在此處閱讀有關此內容的更多信息: 分支語句
continue是Java中的關鍵字,用於跳過循環的迭代。 如果您試圖找到與GOTO等效的產品,則應重新考慮如何解決問題, GOTO永遠不是有效的選擇。
據我所知,Java中沒有goto(有一個關鍵字,但沒有任何意義)
基本上,在Java中沒有實際的方法可以做到這一點。 您似乎正在嘗試執行等效的“ goto”操作,而Java不支持該功能。 break label
和continue label
語句只能分支到封閉的帶標簽語句。
現在,根據Java正式語法,您可以編寫以下代碼:
s: {
continue s;
System.out.println("I am not supposed to print this");
}
System.out.println("I am suppose to print this");
但這仍然無法編譯,原因有二:
僅允許繼續分支到循環語句上的標簽。 ( break
沒有那個限制...但是...)
continue
(或break
)使下一條語句不可訪問。
另請參見: Java中goto語句的替代方法
但是有一種相當棘手的方法可以使您的代碼“起作用”:
static final boolean flag = true; // class attribute ...
...
s: {
if (flag) break s;
System.out.println("I am not supposed to print this");
}
System.out.println("I am suppose to print this");
編譯器將對“測試”進行評估,以使break
實際上是無條件的。 但是JLS表示,第一個println
將被視為可訪問的,因此您不會遇到無法訪問的代碼錯誤。
我想如果您生成此源代碼,這可能會很有用。 除此之外,這只是(IMO)的好奇心。 使用常規的if
/ else
語句...或通過完全刪除第一個“打印”來進行此操作更為簡單。
從理論上講,Java具有Jump語句return
和break
。
return
語句會跳出一個方法,無論是否將值返回給調用語句。
break
語句跳出循環。
正如前面的答案中提到的那樣, goto
在Java中不可用,並且不被視為過程式或面向對象編程中的良好編程習慣。 它存在於順序編程時代。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.