为什么java允许在类本身中初始化实例变量?我的意思是除非我们创建了该类的对象,否则没有为实例变量分配内存,那么如何在不分配内存的情况下初始化它们呢?
答案 0 :(得分:4)
直接初始化实例变量不会在创建对象之前初始化它们 - 它只是Java提供的语法糖,可以在构造函数中保存另一行。例如,以下代码段:
public class MyClass {
int member = 7;
}
等同于
public class MyClass {
int member;
public MyClass() {
memeber = 7;
}
}
答案 1 :(得分:1)
这些实例变量实际上是在执行构造函数之前初始化的。
答案 2 :(得分:1)
如果没有创建该类的对象,则没有内存分配给实例变量。因此,当您仅在构造函数执行之前创建对象时,所有初始化,init块执行都会发生并且内存被分配。
答案 3 :(得分:0)
整个初始化层次结构在这里要说清楚。对于你的情况,做
public class MyClass {
int member = 7;
}
只是运行时初始化member
并将其初始值设置为7的指令。在更细粒度级别,变量初始化为其默认值,然后分配新值。它是一个原子动作。但正如其他人所说,这发生在构造函数调用之前。因此在运行时调用构造函数之前初始化所有局部变量。同样,在member
等变量初始化之前调用所有静态等等
答案 4 :(得分:0)
假设我们有一个名为Auto
的小组:
public class Auto {
int numberOfDoors = 4;
int numberOfWheels = 4;
//..
}
序列跟随:
1。使用“new”运算符创建名为Obj的对象:
Auto fordMustang = new Auto();
2. 已分配内存。
3. 然后,在。
类本身中的实例变量是语法糖。实际上,在创建新对象之前,这些变量不存在。