gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:46:31 26 4
gpt4 key购买 nike

如果我们看一下 Java standard §14.7,我们看到语句可能有标签前缀,例如:

LabeledStatement:

     Identifier : Statement

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

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

即使这样做(注意范围括号):

public class Test {
public static void main(String[] args) {
oops:
{
int k = 3;
}
}
}

所以问题取决于声明是否是陈述。根据标准(和 online documentation ):

In addition to expression statements, there are two other kinds of statements: declaration statements and control flow statements. A declaration statement declares a variable.

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

最佳答案

表达式

int k = 3; 

是一个local variable declaration statement .

statement用于标签语句的语法中

LabeledStatement:

  Identifier : Statement

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

局部变量声明语句可以在blocks内使用可以在带标签的语句中使用。

关于Java标签不规则(可能是bug?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30609301/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com