2017-11-19 6 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입니까?건설중인 static 클래스 필드

+0

A.ob 생성은 A를 생성 한 후 (생성자가 완료된 후에) 발생하므로 ob을 실행하는 동안 여전히 null입니다. – Kraylog

+0

디버거에서이 단계를 수행하여 현재 진행중인 작업을 확인합니다. –

답변

0
A.ob = new A(); 

첫 번째 생성자를 실행함으로써는 A를 생성하고, A.ob로 만들어진 할당한다. 기본적으로

과 같습니다.
A tmp = new A(); 
A.ob = tmp; 

따라서 생성자가 호출 될 때 A.ob은 여전히 ​​null입니다. 그래서 당신은 NullPointerException을 얻는다.