我的私人成员如何设置为null?

Gre*_*urt 3 java null private-members

我已经专业编程java十多年了.这是我试图追踪的最奇怪的错误之一.我有一个私有成员,我初始化它然后它自己变为null.

public class MyObject extends MyParent
{
    private SomeOtherClass member = null;

    public MyObject()
    {
        super();
    }

    public void callbackFromParentInit()
    {
        member = new SomeOtherClass();
        System.out.println("proof member initialized: " + member);
    }

    public SomeOtherClass getMember()
    {
        System.out.println("in getMember: " + member);
        return member;
    }
}
Run Code Online (Sandbox Code Playgroud)

输出:

proof member initialized: SomeOtherClass@2a05ad6d
in getMember: null
Run Code Online (Sandbox Code Playgroud)

如果您运行此代码,显然它将正常工作.在我的实际代码中,在这个确切的模式中只有这三种情况(如果计算打印输入,则为五次).

我在JVM中遇到过一些错误吗?除非我错了,否则父类不会干扰私有成员,无论我在我向你展示的代码行之间放置什么,我都不能在不使用标识符"成员"的情况下更改成员的值".

Jes*_*per 11

这是因为初始化成员变量和调用构造函数的顺序.

您正在callbackFromParentInit()从超类的构造函数调用MyParent.

调用此方法时,将进行设置member.但之后,执行对象初始化的子类部分,并执行初始化器member,设置membernull.

例如,见:

在Java语言规范的第12.5节中描述了调用构造函数和初始化字段的顺序.