【问题标题】:Static class fields in construction构造中的静态类字段
【发布时间】:2017-11-19 12:25:55
【问题描述】:
// 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);
    }
}

为什么这段代码给出 NullPointerException ?如果我将“A.ob.x”更改为“this.x”,就完成了。但是这段代码中已经是 A.ob = this 了吗?

【问题讨论】:

  • A.ob的赋值将在A创建之后发生(在构造函数完成之后),所以在它运行时ob仍然为空。
  • 在调试器中逐步完成,看看发生了什么。

标签: java static


【解决方案1】:
A.ob = new A(); 

这首先通过执行构造函数创建一个A,然后将创建的A分配给A.ob。基本上相当于

A tmp = new A();
A.ob = tmp;

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-06-28
    • 2014-09-16
    • 1970-01-01
    • 2014-02-25
    • 1970-01-01
    • 1970-01-01
    • 2011-10-07
    • 2018-01-12
    相关资源
    最近更新 更多