课堂上的初始化

时间:2014-09-17 05:05:04

标签: java class

为什么java允许在类本身中初始化实例变量?我的意思是除非我们创建了该类的对象,否则没有为实例变量分配内存,那么如何在不分配内存的情况下初始化它们呢?

5 个答案:

答案 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. 然后,在。

之后调用构造函数

类本身中的实例变量是语法糖。实际上,在创建新对象之前,这些变量不存在。