嗨,我在使用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;
这是允许的,因为它是包含变量初始值设定项的字段声明。