首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在JAVA创建对象之前,构造函数代码不会执行

问在JAVA创建对象之前,构造函数代码不会执行
EN

Stack Overflow用户
提问于 2013-03-12 23:14:05
回答 5查看 1.1K关注 0票数 0

我最近在java中使用代码,遇到了这个问题,构造函数中的代码似乎没有执行,因为编译器抛出了NullPointerException。

代码语言:javascript
复制
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);

}  }

现在,当我将对象的创建移到构造函数之前时,也就是说,我在一行中完成了,那么一切都会正常工作。

谁能给我解释一下为什么会发生这种情况,以及我对代码的理解哪里错了?

提前谢谢。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2013-03-12 23:16:25

除非在ObjectA构造函数中,否则永远不会调用ObjectA()构造函数。如果你曾经调用过构造函数(例如从main),你会得到一个堆栈溢出,因为你会永远递归。

我们并不清楚您想要做什么,也不清楚您为什么要使用静态变量,但是您的代码会更简单,如下所示:

代码语言:javascript
复制
public class ObjectA {
    private String message = "The message";

    public static void main(String[] args) {
        ObjectA oa = new ObjectA();
        System.out.println(oa.message);
    }
}

还要注意的是,编译器从不抛出异常。区分编译时错误(语法错误等)和执行时错误(通常是异常)非常重要。

票数 7
EN

Stack Overflow用户

发布于 2013-03-12 23:16:42

您需要将ObjectA oa = new ObjectA()移到main方法中。

此外,也不需要这样做:protected static ObjectA oa;

你应该从教程中复制/粘贴一个Hello World程序,看看它是如何工作的。

票数 0
EN

Stack Overflow用户

发布于 2013-03-12 23:17:57

你定义了一个静态变量oa,但是你只能在类的构造函数中初始化它。您从未实例化您的类ObjectA,因此oa只能为null。

当你调用你的main方法时,它试图访问一个空对象的message变量,因此是NPE。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15365019

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档