问题

这段代码让我盯着我的屏幕几分钟:

loop:
for (;;) {
    // ...
}

(line 137 here)

我以前从未见过这个,我不知道Java有一个"循环"关键字(Netbeans甚至不像关键字那样对它进行着色),并且它可以用JDK 6编译得很好。

谁可以给我解释一下这个?


#1 热门回答(180 赞)

它不是akeywordit是alabel

用法:

label1:
    for (; ; ) {
        label2:
        for (; ; ) {
            if (condition1) {
                // break outer loop
                break label1;
            }
            if (condition2) {
                // break inner loop
                break label2;
            }
            if (condition3) {
                // break inner loop
                break;
            }
        }
    }

Documentation


#2 热门回答(71 赞)

正如其他海报所说,它是一个标签,而不是一个关键词。使用标签可以让你做类似的事情

outer: for(;;) {
   inner: for(;;) {
     break outer;
   }
}

这允许破坏外环。

编辑:Withlink to documentation


#3 热门回答(29 赞)

问题得到了回答,但作为旁注:

我听说过面试问题"为什么这个java代码有效"(剥离了更简单的例子,这里是更简单的一个,蒂姆Büthe):

url: http://www.myserver.com/myfile.mp3
downLoad(url);

你们都知道这段代码是什么(除了可怕的)吗?

解决方案:两个标签urlhttp,一个注释www.myserver.com/myfile.mp3以及一个方法调用,其参数与标签具有相同的名称(url)。是的,这个编译(如果你在其他地方定义方法调用和局部变量)。


原文链接