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

Yak*_*man 0 java constructor creation object execution

我最近在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);

}  }
Run Code Online (Sandbox Code Playgroud)

现在,当我在构造函数之前移动对象的创建时,即我在一行中完成它,然后一切正常.

任何人都可以向我解释为什么会发生这种情况,以及我对代码的理解是错误的?

提前致谢.

Jon*_*eet 7

除了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);
    }
}
Run Code Online (Sandbox Code Playgroud)

另请注意,编译器永远不会抛出异常.区分编译时错误(语法错误等)和执行时错误(通常是异常)非常重要.