方法调用Java类

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

Joa*_*uer 6

类主体只能包含声明.

具体来说,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 ;

如您所见,无论如何都没有语句,因此类主体可能不会直接包含语句.

如果你考虑一下,它是有道理的:那个代码应该在哪个点执行?没有任何背景可以告诉你这一点,所以没有任何意义.


Boz*_*zho 5

这是非法的.在类体中,您只能拥有:块,字段,构造函数,方法和类

你的不是.那你还期望它做什么呢?如果希望在实例化类时执行它,则将其放在块中:

{
    System.currentTimeMillis();
}
Run Code Online (Sandbox Code Playgroud)