我最近在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);
} }现在,当我将对象的创建移到构造函数之前时,也就是说,我在一行中完成了,那么一切都会正常工作。
谁能给我解释一下为什么会发生这种情况,以及我对代码的理解哪里错了?
提前谢谢。
发布于 2013-03-12 23:16:25
除非在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);
}
}还要注意的是,编译器从不抛出异常。区分编译时错误(语法错误等)和执行时错误(通常是异常)非常重要。
发布于 2013-03-12 23:16:42
您需要将ObjectA oa = new ObjectA()移到main方法中。
此外,也不需要这样做:protected static ObjectA oa;
你应该从教程中复制/粘贴一个Hello World程序,看看它是如何工作的。
发布于 2013-03-12 23:17:57
你定义了一个静态变量oa,但是你只能在类的构造函数中初始化它。您从未实例化您的类ObjectA,因此oa只能为null。
当你调用你的main方法时,它试图访问一个空对象的message变量,因此是NPE。
https://stackoverflow.com/questions/15365019
复制相似问题