根据 JLS,表达式可以出现的地方?
Places where an expression can occur as per the JLS?
考虑文章 §15.1 关于表达式可能出现的地方:
An expression occurs in either:
• The declaration of some (class or interface) type that is being declared: in a
field initializer, in a static initializer, in an instance initializer, in a constructor
declaration, in a method declaration, or in an annotation.
• An annotation on a package declaration or on a top level type declaration.
我不认为这是所有表达式出现位置的详尽列表 - 例如:
int a=23; //declaration of a local type
a=33; //this is re-initialization of the type
//or like a simple method invocation from inside a method like
foo();
- 我们试图重新初始化表达式的地方没有被这个子句突出显示。
- 上面的子句中也没有突出显示简单的方法调用 - 尽管它是一个正式的表达式。
上面的条款是否正确 - 或者只是 JLS 中的随意陈述?
该条款实际上是正确的,尽管没有以精确的方式说明。
例如:
a=33;
中的a=33
是表达式,后面跟着;
也是表达式语句。只有在允许其他语句的情况下才允许使用表达式语句;即 within 方法或构造函数声明(在 body 中),或在实例或 static
初始化程序(块)中。
请注意,在 JLS 中,方法的主体是方法声明的一部分。这就是为什么我们可以说语句 在 方法声明中。
foo();
foo()
调用是一个表达式,当后面跟着一个 ;
时,它也是一个表达式语句;见上文。
理解“在”在此上下文中的含义是一个问题。它的意思是“在里面”而不是“直接在里面”。
当您认为位于 class 内的方法声明内的表达式语句是 ... 也 间接地 时,就会出现不精确性class.
您可能会争辩说该子句是描述性的而不是规范性的,因为它们没有准确说明“in”在这种情况下的含义。但即便如此,如果你按照上面的解释,描述是正确的。
您的int a=23;
“示例”不是一个表达式,因此它与您要表达的观点不相符。它可以是一个语句,也可以是一个“在”class 或接口声明中的(包私有)字段声明。
考虑文章 §15.1 关于表达式可能出现的地方:
An expression occurs in either:
• The declaration of some (class or interface) type that is being declared: in a field initializer, in a static initializer, in an instance initializer, in a constructor declaration, in a method declaration, or in an annotation.
• An annotation on a package declaration or on a top level type declaration.
我不认为这是所有表达式出现位置的详尽列表 - 例如:
int a=23; //declaration of a local type
a=33; //this is re-initialization of the type
//or like a simple method invocation from inside a method like
foo();
- 我们试图重新初始化表达式的地方没有被这个子句突出显示。
- 上面的子句中也没有突出显示简单的方法调用 - 尽管它是一个正式的表达式。
上面的条款是否正确 - 或者只是 JLS 中的随意陈述?
该条款实际上是正确的,尽管没有以精确的方式说明。
例如:
a=33;
中的
a=33
是表达式,后面跟着;
也是表达式语句。只有在允许其他语句的情况下才允许使用表达式语句;即 within 方法或构造函数声明(在 body 中),或在实例或static
初始化程序(块)中。请注意,在 JLS 中,方法的主体是方法声明的一部分。这就是为什么我们可以说语句 在 方法声明中。
foo();
foo()
调用是一个表达式,当后面跟着一个;
时,它也是一个表达式语句;见上文。
理解“在”在此上下文中的含义是一个问题。它的意思是“在里面”而不是“直接在里面”。
当您认为位于 class 内的方法声明内的表达式语句是 ... 也 间接地 时,就会出现不精确性class.
您可能会争辩说该子句是描述性的而不是规范性的,因为它们没有准确说明“in”在这种情况下的含义。但即便如此,如果你按照上面的解释,描述是正确的。
您的int a=23;
“示例”不是一个表达式,因此它与您要表达的观点不相符。它可以是一个语句,也可以是一个“在”class 或接口声明中的(包私有)字段声明。