4

我在 Java 教科书中读到,任何语句都可以被标记并且可以与 break 一起使用。但是在尝试此代码时,我收到错误未定义标签。(stackoverflow 的人在将此问题标记为重复之前等待,我已经检查了这些问题,但没有一个能解释这个问题)。

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;
        }
    }
}
4

1 回答 1

2

根据JLS 14.7

带标签语句的标签范围是立即包含的语句。

所以在你的情况下,标签的范围是标签后面firstsysout语句。为了更清楚,您可以使用花括号定义范围,并且在这些花括号内,它可以有效地跳转到 label。所以下面是有效的

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;
}
于 2013-08-10T08:13:16.680 回答