当我在 Eclipse 中编写如下代码时:
public class MyClass {
System.currentTimeMillis();
}
我得到这个编译错误:
Syntax error on token "currentTimeMillis", Identifier expected after this token
如果我将该语句更改为赋值语句,它会起作用:
long time = System.currentTimeMillis();
当然,如果放在方法体内或类体内的 block 内,它不会导致错误。
这是为什么?是否有一些编译器级别的规则规定类主体中只能出现赋值语句或声明?
最佳答案
类主体只能包含声明。
具体来说,§ 8.1.6 of the JLS像这样定义类主体:
A class body may contain declarations of members of the class, that is, fields (§8.3), classes (§8.5), interfaces (§8.5) and methods (§8.4). A class body may also contain instance initializers (§8.6), static initializers (§8.7), and declarations of constructors (§8.8) for the class.
ClassBody: { ClassBodyDeclarationsopt }
ClassBodyDeclarations: ClassBodyDeclaration ClassBodyDeclarations ClassBodyDeclaration
ClassBodyDeclaration: ClassMemberDeclaration InstanceInitializer StaticInitializer ConstructorDeclaration
ClassMemberDeclaration: FieldDeclaration MethodDeclaration ClassDeclaration InterfaceDeclaration ;
如您所见,无论如何那里都没有语句,因此类主体可能不会直接包含语句。
如果您考虑一下,它是有道理的:应该在什么时候执行该代码?没有上下文可以告诉你这件事,所以它没有意义。
关于java - Java 类内部的方法调用返回 "identifier expected after this token"错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6151218/