“环:”的在Java代码中。这是什么,为什么要编译?

这段代码让我盯着我的屏幕几分钟:
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代码有效?” (剥离了一个更简单的例子;这里是较为简单的一个,蒂姆·比斯(TimBü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
        }
    }
}
    
这真的是对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:”是他从不引用的标签。然后“//”使该行的其余部分成为注释。     
它不是关键字;这是一个标签。 它允许你去标记
break
并标记为
continue
。     
它是一个断点标签,允许您突破指定的循环,而不是简单地碰到您最内层的循环。 它在第148行使用。     
你几乎可以写任何东西,因为它是一个标签...... 你有一个例子     
这是一个标签,但请看以下示例:
int a = 0;
int b = 0
while (a<10){
    firstLoop:
    a++;
    while(true){
        b++
        if(b>10){
            break firstLoop;
        }
    }
 }
b>10
时,执行流程进入外循环。     
它是一个标签,Java中的标签可以与
break
continue
关键字一起使用,以进一步控制循环。 在这里以相当好的方式解释: 用Java思考,打破并继续     
它不是关键字,而是标签。如果在
for
循环内写入
break loop;
,则退出该循环。     
这是一个标签。通常是Java中用于在期望位置传输控制流的标签,而所有关键字(例如,继续和中断)具有指定的位置选择。     

要回复问题请先登录注册