2017-11-19 17 views
-3
// 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?構造内の静的クラスフィールド

+0

A.obの割り当ては、Aの作成後に発生します(コンストラクタが終了した後)ので、実行中にobがまだnullです。 – Kraylog

+0

これをデバッガで実行して、何が起こっているかを確認します。 –

答えて

0
A.ob = new A(); 

これは、最初のコンストラクタを実行することにより、Aを作成し、その後、A.obに作成されたAを割り当てます。それは、そう

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

と基本的に同等のコンストラクタが呼び出された時点で、A.obはまだnullです。だからあなたはNullPointerExceptionを取得します。

関連する問題