有没有人在Java中见过以下内容?
public void methodName(){
search:
for(Type[] t : Type[] to){
do something...
}
}
有人可以指出我在这种情况下使用“搜索:”的文档吗?搜索“搜索:”一直没有成效。
谢谢
这是一个标签。来自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
,所以它打破了外循环。
这是一个标记循环的例子。
它允许您break
或continue
目标循环而不是当前循环。
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
它是 JLS 中定义的 Java 标签:http: //docs.oracle.com/javase/specs/jls/se5.0/html/statements.html#78994