Java 在实例方法之外设置变量不起作用

Java 在实例方法之外设置变量不起作用,java,oop,Java,Oop,我能够做到这一点,并且在访问类属性时,我在这段代码中没有发现任何错误 公共级自行车{ 字符串名; 私有字符串颜色; int速度表=78; 字符串数字板; } 但是,如果像下面这样编写代码,当我试图访问同一个包的另一个类时,我会得到一个错误 公共级自行车{ 字符串名; 私有字符串颜色; 国际速度表; 速度计=78; 字符串数字板; } 为什么我不能这样做 简单的回答是:因为它不是有效的Java 在Java类的顶层,只能出现声明和初始值设定项块 声明包括各种类型的字段声明、构造函数声明、方法声

我能够做到这一点,并且在访问类属性时,我在这段代码中没有发现任何错误

公共级自行车{
字符串名;
私有字符串颜色;
int速度表=78;
字符串数字板;
}
但是,如果像下面这样编写代码,当我试图访问同一个包的另一个类时,我会得到一个错误

公共级自行车{
字符串名;
私有字符串颜色;
国际速度表;
速度计=78;
字符串数字板;
}
为什么我不能这样做

简单的回答是:因为它不是有效的Java

在Java类的顶层,只能出现声明和初始值设定项块

  • 声明包括各种类型的字段声明、构造函数声明、方法声明和(嵌套的)类型声明
  • 初始值设定项块包括静态初始值设定项块和实例初始值设定项块。(初始化程序块很少出现,因此您可能还没有遇到它们。)
在您的“好”示例中,类中的每一行都是字段声明。这个:

int speedometer = 78;
是带有初始值设定项的字段声明

在您的“坏”示例中:

是两个独立的构造。第一个是字段声明(没有初始值设定项)。这是允许的。第二个是赋值语句。赋值语句不是声明,因此在Java类中此时不允许使用


语句(通常)允许在方法、构造函数或lambda的主体内,或在初始化程序块内使用。

speedometer=78不能在实例方法之外执行此操作。@FedericoklezCulloca或构造函数。当你在声明中赋值时,它是一个初始化而不是一个语句。当您将它们分开时,赋值是一条语句,并且需要位于方法、构造函数或初始值设定项块中。
int speedometer;
speedometer = 78;