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()替换它,它工作正常。这怎么可能? –