2011-10-02 111 views
0

這是情景:爲什麼Nullpointerexception?

class A{ 
int a; 
} 

class B{ 
A objectA[]=new A[10] ; 
} 

class C{ 
B ObjectB; 
public static void main(String[] args){ 
ObjectB.ObjectA[0].a=1; 
} 
} 

我得到了主要操作一個NullPointerException。但是,如果我只聲明A類的一個對象,我不會收到錯誤。爲什麼這樣?我該如何糾正它?

+2

'新A [10]'不實際*創建* 10'A's。 – bzlm

+2

是不是你的ObjectB null? – peshkira

+0

@ bzlm-好吧,我明白了。但如果我用A objecta = new A()替換它,它工作正常。這怎麼可能? –

回答

1

調用new B()初始化A類型的對象的數組,但沒有任何成員對象。您可以先對其初始化objectB,然後對陣列中的每個項目調用objectA[i] = new A()進行糾正。

class B{ 
    A objectA[]=new A[10] ; 
    { 
     for (int i = 0; i < 10; i++) 
      objectA[i] = new A(); 
    } 
} 

class C{ 
B ObjectB = new B(); 
public static void main(String[] args){ 
ObjectB.ObjectA[0].a=1; 
} 
} 
+0

不正確。雖然他需要這樣做,但NPE是由於嘗試訪問ObjectB中的ObjectA []而導致的,該ObjectB爲空。 – amit

+0

@ amit-那我該怎麼辦? –

+0

@ PRAME編輯我的答案,這應該給你一個正確的例子。 – sverre

5

(1)B ObjectB;不創建的B,它只是板條箱的變量,以箱實例的新的實例; B ObjectB = new B();

(2)另外A objectA[]=new A[10] ;分配數組,但不是數組中的元素,而ObjectB.ObjectA[0].a=1;也會導致NPE。

0

您還沒有初始化ObjectB。沒有分配給ObjectB的內存。因此顯示空指針異常(Nothing分配給ObjectB引用)。

這應該工作:

C類{ 乙對象B =新B();

public static void main(String[] args) { 
    ObjectB.ObjectA[0].a = 1; 
} 

}

相關問題