1 java
我今天开始在Eclipse中编写一段代码,我开始是这样的:
public class MyClass {
System.currentTimeMillis();
}
Run Code Online (Sandbox Code Playgroud)
(忽略我没有直接思考等事实......)
我得到这个编译错误:
令牌"currentTimeMillis"上的语法错误,此令牌后预期的标识符
如果我将该语句更改为赋值语句,它可以工作:
long time = System.currentTimeMillis();
Run Code Online (Sandbox Code Playgroud)
当然,如果放在方法体内并且也放在类体内的块内,它不会导致错误.
为什么是这样?是否有一些编译器级规则表明只有赋值语句或声明应存在于类体内?
TIA
类主体只能包含声明.
具体来说,JLS的第8.1.6节定义了这样的类体:
甲类体可含有类的成员的声明,即,字段(§8.3) ,类(第8.5节),接口(第8.5节)和方法(8.4节).类主体还可以包含实例初始值设定项(第8.6节),静态初始化程序(第8.7节)和类的构造函数声明(第8.8节).
ClassBody: { ClassBodyDeclarationsopt }
ClassBodyDeclarations: ClassBodyDeclaration ClassBodyDeclarations ClassBodyDeclaration
ClassBodyDeclaration: ClassMemberDeclaration InstanceInitializer StaticInitializer ConstructorDeclaration
ClassMemberDeclaration: FieldDeclaration MethodDeclaration ClassDeclaration InterfaceDeclaration ;
如您所见,无论如何都没有语句,因此类主体可能不会直接包含语句.
如果你考虑一下,它是有道理的:那个代码应该在哪个点执行?没有任何背景可以告诉你这一点,所以没有任何意义.
这是非法的.在类体中,您只能拥有:块,字段,构造函数,方法和类
你的不是.那你还期望它做什么呢?如果希望在实例化类时执行它,则将其放在块中:
{
System.currentTimeMillis();
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
714 次 |
最近记录: |