编程语言
首页 > 编程语言> > java – 初始化对象时,实例变量总是没有初始化?

java – 初始化对象时,实例变量总是没有初始化?

作者:互联网

以下代码生成NullPointerException –

public class MyClass {

    static MyClass instance= new MyClass(); // line 3
    static Boolean have_Instance = true;
    Boolean inst_Avail=have_Instance; // line 5

    Boolean isInstAvail(){
        return inst_Avail;
    }

    public static void main(String[] args) {
        System.out.println(instance.isInstAvail() ? "Instance is there.":""); // gives java.lang.NullPointerException
    }

}

如果我将第3行移到第5行之后,它运行正常.订单如何在这里重要?不应该每次实例化一个类设置iVar值吗?

解决方法:

当在第3行创建对象时,该类尚未完成初始化,并且has_instance变量具有其默认值null.此值分配给对象的inst_Avail成员变量,因此main方法中instance.isInstAvail()返回的值将为null.

解决这个问题的一种简单方法是交换第3行和第4行,因此在创建对象时,has_instance已经有了一个值.或者您可以将have_instance声明为布尔值而不是布尔值,因此它将具有值false而不是null.这会使程序打印出来.

或者也许你可以重新考虑你想要做的事情.在类完成初始化之前创建类的实例很少是个好主意,特别是如果类不是“最终”(即可能有子类).

标签:java,initialization,instance-variables
来源: https://codeday.me/bug/20190825/1720887.html