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

这段代码只是让我盯着屏幕看了几分钟:

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

(line 137 here)

我以前从未见过这种情况,而且我也不知道 Java 有一个“ loop”关键字(NetBeans 甚至没有像给关键字上色那样给它上色) ,而且它可以很好地与 JDK 6一起编译。

解释是什么?

58994 次浏览

它不是一个 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;
}
}
}

文件。

这不是关键词,是 标签

它允许你去一个标签 break和标签 continue

它是一个断点标签,允许您跳出指定的循环,而不仅仅是您碰巧处于的最内部的循环。

148号线台用的。

它是一个标签,Java 中的标签可以与 breakcontinue关键字一起使用,以便对循环进行额外的控制。

这里有一个很好的解释:

用 Java 思考,中断并继续

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

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

这允许打破外部循环。

链接到文档

这是一个标签,不过请看下面的例子:

int a = 0;
int b = 0
while (a<10){
firstLoop:
a++;
while(true){
b++
if(b>10){
break firstLoop;
}
}
}

b>10时,执行流进入外部循环。

那不是关键词,是个标签。它意味着与嵌套循环中的 breakcontinue关键字一起使用:

outer:
for(;;){
inner:
for(;;){
if(){
break inner; // ends inner loop
} else {
break outer; // ends outer loop
}
}
}

你几乎可以写任何东西,因为它是一个标签..。 你有一个例子 给你

它不是一个关键字,而是一个 标签。如果在 for循环中编写 break loop;,并退出该循环。

这个问题已经得到了回答,但作为一个附带说明:

我曾经听说过这样的面试问题: “为什么这个 Java 代码有效?”(去掉更简单的例子; 下面是更刻薄的例子,thx Tim Büthe) :

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

你们都知道这个代码是什么吗(除了糟糕之外) ?

Solution: two labels, url and http, a comment www.myserver.com/myfile.mp3 and a method call with a parameter that has the same name (url) as the label. Yup, this compiles (if you define the method call and the local variable elsewhere).

这实际上是对 seanizer 在 org.life.java 上的评论的回复,但是我想加入一些代码,这样我就不能使用评论特性了。

虽然我很少发现“ break label”的用法,但它确实偶尔会发生。最常见的情况是,当我搜索某个结构中需要一个嵌套循环来搜索的内容时,比如:

search:
for (State state : stateList)
{
for (City city : state.cityList)
{
if (city.zipcode.equals(wantZip))
{
doSomethingTo(city);
break search;
}
}
}

Usually in such cases I push the whole thing into a subroutine so that on a hit I can return the found object, and if it falls out the bottom of the loop I can return null to indicate a not found, or maybe throw an exception. But this is occasionally useful.

坦率地说,我认为 Java 的发明者包含了这个特性,因为在这个特性和异常处理之间,他们消除了 GOTO 的最后两个合法用途。

非常晚的附录:

我曾经看到一段很棒的代码,程序员写道:

http://www.example.com/xyz.jsp
for (Foo foo1 : foolist)

实际上他没有说“ example.com”,而是我们公司的网站。

它给人的印象是代码中有一个 URL。它成功地编译了,就像它做了什么事一样。但是... 它有什么用?

在现实中,它什么也不做。“ http:”是一个标签,他从来没有参考。然后,“//”使该行的其余部分成为注释。

这是个标签。一般来说,Java 中使用的一个标签用于在所需位置传输控制流,而所有关键字,如继续和中断,都有一个指定的位置选择。