Java类内的方法调用

Java类内的方法调用,java,Java,今天我打算在Eclipse中编写一段代码,我是这样开始的: public class MyClass { System.currentTimeMillis(); } (忽略我没有正确思考的事实,等等…) 我得到这个编译错误: 令牌“currentTimeMillis”上的语法错误,该令牌后面应为标识符 如果我将该语句更改为赋值语句,它将起作用: long time = System.currentTimeMillis(); 当然,如果将其放置在方法体内部以及类体内的块中,则不会导致错

今天我打算在Eclipse中编写一段代码,我是这样开始的:

public class MyClass {
    System.currentTimeMillis();
}
(忽略我没有正确思考的事实,等等…)

我得到这个编译错误:

令牌“currentTimeMillis”上的语法错误,该令牌后面应为标识符

如果我将该语句更改为赋值语句,它将起作用:

long time = System.currentTimeMillis();
当然,如果将其放置在方法体内部以及类体内的块中,则不会导致错误

为什么会这样?是否有一些编译器级别的规则规定只有赋值语句或声明应该出现在类主体中


TIA这是非法的。在类主体中,只能有:块、字段、构造函数、方法和类

你的也不是。你希望它做什么呢?如果希望在实例化类时执行,请将其放置在块中:

{
    System.currentTimeMillis();
}

这是违法的。在类主体中,只能有:块、字段、构造函数、方法和类

你的也不是。你希望它做什么呢?如果希望在实例化类时执行,请将其放置在块中:

{
    System.currentTimeMillis();
}
是一个实例变量,它初始化到创建封闭对象的当前时间有效

System.currentTimeMillis();
它本身就是一种陈述无效,包含构造函数、方法、静态初始化器等

是一个实例变量,它初始化到创建封闭对象的当前时间有效

System.currentTimeMillis();
它本身就是一种陈述无效,包含构造函数、方法、静态初始化器等

是否有一些编译器级别的规则规定只有赋值语句或声明应该出现在类主体中

一句话:是的。在类主体级别,可以有实例和静态成员变量声明、方法声明、嵌套类、对象初始化块、静态初始化块和注释。根据定义,就是这样

语言的“编译器级规则”称为语法

是否有一些编译器级别的规则规定只有赋值语句或声明应该出现在类主体中

一句话:是的。在类主体级别,可以有实例和静态成员变量声明、方法声明、嵌套类、对象初始化块、静态初始化块和注释。根据定义,就是这样


一种语言的“编译器级规则”称为它的语法。

您需要从方法内部调用代码,而不仅仅是在方法本身。例如

public class MyClass {
    public static void main(String[] args)
    {
        System.currentTimeMillis();
    }
}

上面的方法仍然不会起任何作用,但它是合法的:-)

您需要从方法内部调用代码,而不是像这样单独调用代码。例如

public class MyClass {
    public static void main(String[] args)
    {
        System.currentTimeMillis();
    }
}

上面这句话仍然没什么用,但它是合法的:-)

行中没有错误

long time = System.currentTimeMillis();
因为您正在类内指定一个私有变量(长时间)并将其设置为默认值(System.currentTimeMillis()),所以当您创建类的新实例时,该变量将被实例化


只调用System.currentTimeMillis()只有nosense,因为您没有做任何事情(既没有上下文,也没有将值赋给私有变量)

您不会得到该行的错误

long time = System.currentTimeMillis();
因为您正在类内指定一个私有变量(长时间)并将其设置为默认值(System.currentTimeMillis()),所以当您创建类的新实例时,该变量将被实例化


只调用System.currentTimeMillis()只有nosense,因为您没有做任何事情(既没有上下文也没有将值赋给私有变量)

类主体只能包含声明

具体来说,定义类主体如下:

类主体可以包含类成员的声明,即字段、类、接口和方法。类主体还可以包含实例初始值设定项、静态初始值设定项和类的构造函数声明

ClassBody: { ClassBodyDeclarationsopt }
ClassBodyDeclarations: ClassBodyDeclaration ClassBodyDeclarations ClassBodyDeclaration
ClassBodyDeclaration: ClassMemberDeclaration InstanceInitializer StaticInitializer ConstructorDeclaration
ClassMemberDeclaration: FieldDeclaration MethodDeclaration ClassDeclaration InterfaceDeclaration ; 类主体: {ClassBodyDeclarationsopt}
类主体声明: 类主体声明 ClassBodyDeclarations ClassBodyDeclarations
ClassBody声明: 类成员声明 实例初始化器 静态初始化器 构造函数声明
类别成员声明: 字段声明 方法声明 类声明 接口声明 ; 正如您所看到的,其中没有任何语句,因此类主体可能不直接包含语句


如果您仔细想想,它是有意义的:在哪一点上应该执行代码?没有上下文可以告诉您,因此没有意义。

类主体只能包含声明

具体来说,定义类主体如下:

类主体可以包含类成员的声明,即字段、类、接口和方法。类主体还可以包含实例初始值设定项、静态初始值设定项和类的构造函数声明

ClassBody: { ClassBodyDeclarationsopt }
ClassBodyDeclarations: ClassBodyDeclaration ClassBodyDeclarations ClassBodyDeclaration
ClassBodyDeclaration: ClassMemberDeclaration InstanceInitializer StaticInitializer ConstructorDeclaration
ClassMemberDeclaration: FieldDeclaration MethodDeclaration ClassDeclaration InterfaceDeclaration ; 类主体: {ClassBodyDeclarationsopt}
类主体声明: 类主体声明 ClassBodyDeclarations ClassBodyDeclarations
ClassBody声明: 类成员声明 实例初始化器 静态初始化器 构造函数声明
类别成员声明: 字段声明 方法声明 类声明 接口声明 ; 正如您所看到的,其中没有任何语句,因此类主体可能不直接包含语句

如果你仔细想想,它是有道理的:在哪一点上,代码应该是exe