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類的一個對象,我不會收到錯誤。爲什麼這樣?我該如何糾正它?
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類的一個對象,我不會收到錯誤。爲什麼這樣?我該如何糾正它?
調用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;
}
}
(1)B ObjectB;
不創建的B
,它只是板條箱的變量,以箱實例的新的實例; B ObjectB = new B();
(2)另外A objectA[]=new A[10] ;
分配數組,但不是數組中的元素,而ObjectB.ObjectA[0].a=1;
也會導致NPE。
您還沒有初始化ObjectB。沒有分配給ObjectB的內存。因此顯示空指針異常(Nothing分配給ObjectB引用)。
這應該工作:
C類{ 乙對象B =新B();
public static void main(String[] args) {
ObjectB.ObjectA[0].a = 1;
}
}
'新A [10]'不實際*創建* 10'A's。 – bzlm
是不是你的ObjectB null? – peshkira
@ bzlm-好吧,我明白了。但如果我用A objecta = new A()替換它,它工作正常。這怎麼可能? –