[英]"loop:" in Java code. What is this, and why does it compile?
這段代碼讓我盯着屏幕看了幾分鍾:
loop:
for (;;) {
// ...
}
( 此處為第 137 行)
我以前從未見過這個,我不知道 Java 有一個“循環”關鍵字(NetBeans 甚至不會像關鍵字那樣給它上色),而且它在 JDK 6 中編譯得很好。
解釋是什么?
它不是keyword
,而是label
。
用法:
label1:
for (; ; ) {
label2:
for (; ; ) {
if (condition1) {
// break outer loop
break label1;
}
if (condition2) {
// break inner loop
break label2;
}
if (condition3) {
// break inner loop
break;
}
}
}
文檔。
正如其他海報所說,它是一個標簽,而不是一個關鍵詞。 使用標簽可以執行以下操作:
outer: for(;;) {
inner: for(;;) {
break outer;
}
}
這允許斷開外環。
這個問題得到了回答,但作為旁注:
我聽說過“為什么這個 Java 代碼有效?”這樣的面試問題。 (去掉了更簡單的例子;這是更簡單的例子,感謝 Tim Büthe):
url: http://www.myserver.com/myfile.mp3
downLoad(url);
你們都知道這個代碼是什么(除了可怕的)?
解決方案:兩個標簽, url
和http
,一個注釋www.myserver.com/myfile.mp3
和一個帶有與標簽同名 ( url
) 參數的方法調用。 是的,這會編譯(如果您在其他地方定義方法調用和局部變量)。
這不是關鍵字,而是標簽。 它旨在與嵌套循環中的break
和continue
關鍵字一起使用:
outer:
for(;;){
inner:
for(;;){
if(){
break inner; // ends inner loop
} else {
break outer; // ends outer loop
}
}
}
它不是關鍵字; 這是一個標簽。
它允許您標記為break
和標記為continue
。
它是一個斷點標簽,允許您跳出指定的循環,而不僅僅是您碰巧所在的最里面的循環。
它在第 148 行使用。
這確實是對 seanizer 對 org.life.java 答案的評論的回復,但我想放入一些代碼,所以我無法使用評論功能。
雖然我發現“中斷標簽”的用途非常罕見,但它確實偶爾會發生。 最常見的情況是,當我在需要嵌套循環搜索的結構中搜索某些內容時,例如:
search:
for (State state : stateList)
{
for (City city : state.cityList)
{
if (city.zipcode.equals(wantZip))
{
doSomethingTo(city);
break search;
}
}
}
通常在這種情況下,我將整個事情推入一個子程序,以便在命中時我可以返回找到的對象,如果它落在循環的底部,我可以返回 null 以指示未找到,或者可能拋出異常。 但這偶爾有用。
坦率地說,我認為 Java 的發明者包含此功能是因為在此功能和異常處理之間,他們消除了 GOTO 的最后兩個合法用途。
很晚的附錄:
我曾經看到過一段很棒的代碼。 程序員寫道:
http://www.example.com/xyz.jsp
for (Foo foo1 : foolist)
他實際上並沒有說“example.com”,而是我們公司的網站。
它給人的印象是代碼中有一個 URL。 它編譯成功,就像它在做某事一樣。 但是……它有什么作用?
實際上它什么都不做。 “http:”是他從不引用的標簽。 然后“//”使該行的其余部分成為注釋。
這是一個標簽,但請看以下示例:
int a = 0;
int b = 0
while (a<10){
firstLoop:
a++;
while(true){
b++
if(b>10){
break firstLoop;
}
}
}
當b>10
,執行流程轉到外循環。
你幾乎可以寫任何東西,因為它是一個標簽......你有一個例子here
它不是關鍵字,而是標簽。 如果在for
循環中你寫了break loop;
,然后退出該循環。
它是一個標簽。 通常是 Java 中用於在所需位置傳輸控制流的標簽,而所有關鍵字(如 continue 和 break)都有指定的位置選擇。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.