嗨,我在使用Java进行初始化时遇到问题,以下代码给了我一个编译错误,叫做:Expected instanceInt = 100; 但我已经宣布了 如果这些东西与堆栈和堆的东西有关,请用简单的术语进行解释,我是Java的新手,并且我对这些领域不了解。

public class Init {
int instanceInt;
instanceInt = 100;
public static void main(String[] args) {
int localInt;
u = 9000;
}
}

您不能在课程中间使用语句。它必须与声明位于同一块或同一行中。

做您想要的事情的通常方法是:

声明期间的初始化
public class MyClass{
private int i = 0;
}
通常,如果要为字段定义默认值,则是一个好主意。
构造函数块中的初始化
public class MyClass{
private int i;
public MyClass(){
this.i = 0;
}
}

如果您希望在字段初始化期间具有一些逻辑(如果/循环),则可以使用此块。问题在于,要么您的构造函数将彼此调用,要么它们将具有基本相同的内容。

以您的情况,我认为这是最好的方法。

方法块中的初始化
public class MyClass{
private int i;
public void setI(int i){
this.i = i;
}
}
这并不是真正的初始化,但是您可以随时设置值。
实例初始化程序块中的初始化
public class MyClass{
private int i;
{
i = 0;
}
}

当构造函数不够用时使用这种方法(请参阅构造函数块的注释),但通常开发人员倾向于避免这种形式。

资源:

JLS-实例初始化器

在同一主题上:

在Java中使用初始化程序与构造函数

实例初始化器与构造函数有何不同?

奖励:

这是什么代码?
public class MyClass {
public MyClass() {
System.out.println("1 - Constructor with no parameters");
}
{
System.out.println("2 - Initializer block");
}
public MyClass(int i) {
this();
System.out.println("3 - Constructor with parameters");
}
static {
System.out.println("4 - Static initalizer block");
}
public static void main(String... args) {
System.out.println("5 - Main method");
new MyClass(0);
}
}

答案

您的答案链接已过期。 您能否在实际帖子中包含这些信息?

将其放在初始化程序块中。

public class Init {
int instanceInt;
{
instanceInt = 100;
}
public static void main(String[] args) {
int localInt;
int u = 9000;
}
}
或者只是在声明时初始化:
public class Init {
int instanceInt = 100;
public static void main(String[] args) {
int localInt;
int u = 9000;
}
}

参考文献:

Java教程-初始化字段

Java-初始化程序块

您需要做:

int instanceInt = 100;

如果它是static,则可以在static块中初始化。

您不能在声明区域中使用单独的语句将值分配给类成员。您必须从函数(通常是类方法)执行此操作。

对于您的情况,请考虑在声明后立即进行分配。

根据Java语言规范:

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.

但是,声明

instanceInt = 100;

这些都不是,因此不允许作为类主体的一部分。您需要做的是:

int instanceInt = 100;

这是允许的,因为它是包含变量初始值设定项的字段声明。