Java 构造中的静态类字段
为什么这段代码会被赋予NullPointerException?如果我把“A.ob.x”改为“this.x”,就完成了。但是这个代码中已经有A.ob=这个了吗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
// 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;