gpt4 book ai didi

Java:标签后允许的语句

转载 作者:太空狗 更新时间:2023-10-29 22:34:21 26 4
gpt4 key购买 nike

我正在研究 Java 语法,所以这个问题纯粹出于好奇。这段代码:

http://www.google.com
Object val = 5 <- 4;

编译,因为标签 (http)“后面必须跟一个语句”。以下两个变体编译:

http://www.google.com
{ Object val = 5 <- 4; }

Object val;
http://www.google.com
val = 5 <- 4;

在这两种情况下,我都从声明切换到了表达式。这让我想知道 Java 中的“语句”到底是什么,但是 doc状态:

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

JLS只是说(在标签上)

The Identifier is declared to be the label of the immediately contained Statement.

它没有提及“表达式语句”。

我是否遗漏了什么,或者这只是一个不清楚/不正确的规范?

最佳答案

如果您更仔细地阅读 JLS 的第 14 章,您会发现 LocalVariableDeclarationStatement 不是语句。他们不是很直观,是吗?

具体来说,在 JLS 14.2 ,我们看到:

  • 一个 block 基本上由零个或多个 block 语句组成
  • BlockStatement 是以下之一:
    • 局部变量声明语句
    • 类声明
    • 声明

因此 LocalVariableDeclarationStatement 在层次结构中不是 Statement 的后代,而是兄弟。它们都是 BlockStatement 的类型。

标签后面必须跟一个真正的语句——也就是说,既不是 LocalVariableDeclarationStatement 也不是 ClassDeclaration 的 BlockStatement 的特定子类型。 14.5 中列出了 Statement 的各种子类型.您不会在其中找到 LocalVariableDeclarationStatement,但您会发现 ExpressionStatement 作为 StatementWithoutTrailingSubstatement 的子类型。

关于Java:标签后允许的语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43061843/

26 4 0