2011-10-02 121 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; 
} 

}

相关问题