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

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

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); 

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

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

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

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

它不是一个关键字,它的标签 。

它可以让你去标记中断和标记为继续。

它是一个断点标签,允许你跳出一个指定的循环,而不是简单的内在的一个你碰巧在。

它在148线上使用

这实际上是对org.life.java的回答seanizer的评论的答复,但我想放入一些代码,所以我不能使用评论function。

虽然我很less发现“掰标签”的用法,但偶尔也会发生这种情况。 最常见的情况是,当我search的东西是在一个需要嵌套循环的结构中进行search时,如:

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

通常在这种情况下,我把整个东西放到一个子程序中,这样一来我就可以返回find的对象,如果它掉到循环的底部,我可以返回null来表示找不到,或者抛出一个exception。 但这偶尔有用。

坦率地说,我认为Java的发明者包含了这个特性,因为在这个和exception处理之间,它们消除了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 ,执行stream程转到外部循环

它是一个标签,java中的标签可以与breakcontinue关键字一起使用,以额外控制循环。 这里有一个很好的解释: http : //www.linuxtopia.org/online_books/programming_books/thinking_in_java/TIJ305_024.htm

这不是关键字,而是标签 。 如果在for循环中写入break loop; ,你退出这个循环

这是一个标签。 java中使用的一般标签在所有位置转移控制stream,而所有的关键字如继续,中断都有一个指定的位置。

Interesting Posts