我最近在玩java代码,遇到了这个问题,构造函数中的代码似乎没有被执行,因为编译器抛出了NullPointerException。
public class ObjectA {
protected static ObjectA oa;
private String message = "The message";
public ObjectA() {
oa = new ObjectA();
}
public static void main(String args[]) {
System.out.println(oa.message);
} }
现在,当我将对象的创建移到构造函数之前,即我在一行中完成它时,一切都会正常工作。
谁能向我解释为什么会发生这种情况,以及我对代码的理解错误在哪里?
提前致谢。
最佳答案
您永远不会调用 ObjectA()
构造函数,除了在 ObjectA
构造函数中。如果您确实调用了构造函数(例如,从main
),您将遇到堆栈溢出,因为您将永远递归。
目前尚不清楚您要做什么或为什么使用静态变量,但您的代码会更简单,如下所示:
public class ObjectA {
private String message = "The message";
public static void main(String[] args) {
ObjectA oa = new ObjectA();
System.out.println(oa.message);
}
}
另请注意,编译器永远不会引发异常。区分编译时错误(语法错误等)和执行时错误(通常是异常)非常重要。
关于java - JAVA 对象创建之前不执行构造函数代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15365019/