2

有没有人在Java中见过以下内容?

public void methodName(){ 
   search:
     for(Type[] t : Type[] to){
       do something...
   }
}

有人可以指出我在这种情况下使用“搜索:”的文档吗?搜索“搜索:”一直没有成效。

谢谢

4

3 回答 3

12

这是一个标签。来自Java 语言规范的§14.7

语句可能有标签前缀...

(枯燥的语法省略了,标记起来很痛苦)

与 C 和 C++ 不同,Java 编程语言没有goto语句;标识符语句标签与出现在标记语句中的任何位置的break(§14.15) 或(§14.16) 语句一起使用。continue

您经常看到标签的一个地方是嵌套循环,您可能希望尽早跳出两个循环:

void foo() {
    int i, j;

    outerLoop:                     // <== label
    for (i = 0; i < 100; ++i) {
        innerLoop:                 // <== another label
        for (j = 0; j < 100; ++j) {
            if (/*...someCondition...*/) {
                break outerLoop;   // <== use the label
            }
        }
    }
}

通常,break在内循环中只会破坏内循环,但不会破坏外循环。但是因为它是使用标签的 定向 break,所以它打破了外循环。

于 2012-04-25T20:31:57.833 回答
1

这是一个标记循环的例子。

它允许您breakcontinue目标循环而不是当前循环。

Outer:
    for(int intOuter=0; intOuter < intArray.length ; intOuter++)
    {
      Inner:
      for(int intInner=0; intInner < intArray[intOuter].length; intInner++)
      {
        if(intArray[intOuter][intInner] == 30)
        {
          blnFound = true;
          break Outer; // this line breaks the outer loop instead of the inner loop.
        }  

      }
    }

示例取自:http ://www.java-examples.com/java-break-statement-label-example

于 2012-04-25T20:32:44.643 回答
0

它是 JLS 中定义的 Java 标签:http: //docs.oracle.com/javase/specs/jls/se5.0/html/statements.html#78994

于 2012-04-25T20:32:05.513 回答