java - JAVA 对象创建之前不执行构造函数代码

标签 java object constructor execution creation

我最近在玩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/

相关文章:

java - 从参数中包含共享对象的另一个构造函数调用构造函数 init

C++ 在该类的函数中使用该类的对象

Java 和内存泄漏

java - 如何动态注入(inject)spring bean(原型(prototype)范围)

java - Spring Cloud 配置 : how to use multiple configs

javascript - 如何从 JavaScript 数组中删除重复的对象(字符串)

Java:关于字符串的初学者问题

javascript - 如何更改对象的构造函数?

java - 流减少不正确地使用长类型

java - 从另一个类的构造函数中获取值