在构造函数和类的数据部分中使用关键字new之间的区别

时间:2013-12-23 01:50:40

标签: java

在构造函数和类的数据部分中使用关键字new有什么区别?

通过示例更容易:

Approach1:

public class Foo{
    RandomClass bar = new RandomClass();
    Foo(){}
}

Approach2:

public class Foo{
    RandomClass bar;

    Foo(){
        bar = new RandomClass();
    }
}

有人可以解释一下这些之间的区别吗?

2 个答案:

答案 0 :(得分:2)

实际上没有区别。 Java编译器实际上会为两者生成完全相同的代码。它们完全相同。但至于风格,第一个通常是首选。

答案 1 :(得分:0)

这两种初始化似乎几乎没有区别,经过自己测试后,我发现的只是执行顺序的区别。
在main方法中新建一个实例时,它将首先进入构造函数以创建一个实例作为您的订单 此时,您的程序将执行字段默认值位置,这是您在RandomClass bar = new RandomClass();处放置的位置 您的会员字段将填入您放置的默认值的值 这就是我们为成员字段调用的default value 在那句话之后,主线程将跳回到构造函数,并执行
bar = new RandomClass();
这意味着成员字段的默认设置将被构造函数程序覆盖。

总之,这两种初始化方法似乎没有太多区别。并且我个人来说,我希望每个成员字段都有一个默认值,或者我会在每个构造函数中使用init()方法来统一初始化样式。