Java 构造中的静态类字段

Java 构造中的静态类字段,java,static,Java,Static,为什么这段代码会被赋予NullPointerException?如果我把“A.ob.x”改为“this.x”,就完成了。但是这个代码中已经有A.ob=这个了吗 // package and import things.. public class A { public int x; public static A ob; A() { A.ob.x = 5; } public static void main(String args

为什么这段代码会被赋予NullPointerException?如果我把“A.ob.x”改为“this.x”,就完成了。但是这个代码中已经有A.ob=这个了吗

// package and import things..

public class A {

    public int x;

    public static A ob;

    A() {
        A.ob.x = 5;
    }

    public static void main(String args[) {
        A.ob = new A(); 
        System.out.println(ob.x);
    }
}
这首先通过执行构造函数创建A,然后将创建的A分配给
A.ob
。基本上相当于

A.ob = new A(); 

因此,在调用构造函数时,A.ob仍然为null。因此您会得到一个NullPointerException。

a.ob
的赋值将在创建之后发生(在构造函数完成之后),因此当它运行时
ob
仍然为null。请在调试器中逐步执行此操作,以查看发生了什么。
A tmp = new A();
A.ob = tmp;