微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

什么时候在构造函数外部进行初始化?

如何解决什么时候在构造函数外部进行初始化?

  • 变量被初始化为其类型的认值(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] 举报,一经查实,本站将立刻删除。