Java标签不规则(可能有bug?)

Java标签不规则(可能有bug?),java,label,java-8,standards,Java,Label,Java 8,Standards,如果我们查看§14.7,我们会发现语句可能有标签前缀,例如: 标签状态:      标识符:语句 理论上,标签应该能够标记任何后续语句。因此,例如,以下内容将相应编译: public class Test { public static void main(String[] args) { hello: return; } } 直观地说,这还包括: public class Test { int i; public static voi

如果我们查看§14.7,我们会发现语句可能有标签前缀,例如:

标签状态:

     标识符:语句

理论上,标签应该能够标记任何后续语句。因此,例如,以下内容将相应编译:

public class Test {
    public static void main(String[] args) {
    hello:
        return;
    }

}
直观地说,这还包括:

public class Test {
    int i;
    public static void main(String[] args) {
        Test t = new Test();
    label:
        t.i = 2;        
    }
}
但以下内容不会编译:

public class Test {
    public static void main(String[] args) {
    oops:
        int k = 3;  
    }
}
尽管如此(请注意范围内的括号):

因此,问题取决于声明是否是声明。根据标准(和标准):

除了表达式语句,还有两种其他类型的语句:声明语句和控制流语句。声明语句声明一个变量

我在OSX和Windows上的Java7和Java8中都注意到了这种行为。这是错误还是我误解了标准?

表达式

int k = 3; 
这是一个很好的例子

在label语句的语法中使用

标签状态

  <代码>标识符:

不包含局部变量声明语句。因此,不能在带标签的语句中直接使用它们


局部变量声明语句可以在其中使用,也可以在标记语句中使用。

有趣。编译器会给出什么错误消息?
int k = 3;