在构造函数和类的数据部分中使用关键字new
有什么区别?
通过示例更容易:
Approach1:
public class Foo{
RandomClass bar = new RandomClass();
Foo(){}
}
Approach2:
public class Foo{
RandomClass bar;
Foo(){
bar = new RandomClass();
}
}
有人可以解释一下这些之间的区别吗?
答案 0 :(得分:2)
实际上没有区别。 Java编译器实际上会为两者生成完全相同的代码。它们完全相同。但至于风格,第一个通常是首选。
答案 1 :(得分:0)
这两种初始化似乎几乎没有区别,经过自己测试后,我发现的只是执行顺序的区别。
在main方法中新建一个实例时,它将首先进入构造函数以创建一个实例作为您的订单
此时,您的程序将执行字段默认值位置,这是您在RandomClass bar = new RandomClass();
处放置的位置
您的会员字段将填入您放置的默认值的值
这就是我们为成员字段调用的default value
在那句话之后,主线程将跳回到构造函数,并执行
bar = new RandomClass();
这意味着成员字段的默认设置将被构造函数程序覆盖。
总之,这两种初始化方法似乎没有太多区别。并且我个人来说,我希望每个成员字段都有一个默认值,或者我会在每个构造函数中使用init()
方法来统一初始化样式。