我在
Java教科书中读到任何语句都可以被标记,并且可以与break一起使用.
但在尝试此代码时,我得到错误未定义标签. (堆栈溢出的人在将此问题标记为重复之前等待,我已检查过这些问题,但没有一个解释此问题).
public class LabelTest {
public static void main(String[] args) {
first: System.out.println("First statement");
for (int i = 0; i < 2; i++) {
System.out.println("Second statement");
break first;
}
}
}
最佳答案 按照
JLS 14.7
The scope of a label of a labeled statement is the immediately
contained Statement.
所以在你的情况下,lable的范围首先是标签后面的sysout语句.更清楚的是,您可以使用花括号定义范围,并且在这些括号内,它有效跳转到标签.所以下面是有效的
first: {
System.out.println("First statement");
for (int i = 0; i < 2; i++) {
System.out.println("Second statement");
break first;
}
}
要么
first: {
System.out.println("First statement");
break first;
}
second:
for(int i=0;i<2;i++){
System.out.println("Second statement");
break second;
}