如何解决什么时候在构造函数外部进行初始化?
-
变量被初始化为其类型的默认值(0,null等)
-
首先,调用超类构造函数。如果超类构造函数调用任何在该类中重写的虚拟方法,则该重写将看到默认值,而不管构造函数主体中是否有任何变量初始化程序或初始化。
-
然后执行变量初始化器。
因此,如果您在构造函数主体中更改变量的值,则变量初始值设定项设置的任何值都将被覆盖。(当然,先前的值可能已在其他链式构造函数等中使用。)
有关更多详细信息,请参见JLS的12.5节。
解决方法
假设我有
class MyObject
{
Object object1 = new Object();
Object object2;
public MyObject()
{
object2 = new Object();
}
public MyObject(Object object2)
{
this.object2 = object2;
}
public MyObject(Object object1,Object object2)
{
this.object1 = object1;
this.object2 = object2;
}
}
什么时候object1
初始化?之前object2
,之后object2
,取决于?
如果我有一个与的全局定义冲突的构造函数object1
,例如在上面的第三个构造函数中,该怎么办?object
取哪个值?
这不会给我造成任何问题,但我只是想更好地理解该语言。我喜欢了解这些小知识,以便以后可以潜在地利用它们。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。