Java 为什么会出现Nullpointerexception?
这是一个场景:Java 为什么会出现Nullpointerexception?,java,nullpointerexception,Java,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的对象,我不会得到错误。为什么会这样?如何更正它?调用new B()初始化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]=newa()
,来纠正它
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;
}
}
B类{
A objectA[]=新的A[10];
{
对于(int i=0;i<10;i++)
objectA[i]=新的A();
}
}
C类{
B ObjectB=新的B();
公共静态void main(字符串[]args){
ObjectB.ObjectA[0].a=1;
}
}
调用new B()
初始化A
类型的对象数组,但不初始化任何成员对象。您可以先初始化objectB
,然后为数组中的每个项调用objectA[i]=newa()
,来纠正它
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;
}
}
B类{
A objectA[]=新的A[10];
{
对于(int i=0;i<10;i++)
objectA[i]=新的A();
}
}
C类{
B ObjectB=新的B();
公共静态void main(字符串[]args){
ObjectB.ObjectA[0].a=1;
}
}
(1)B对象B
不创建B
的新实例,它只是装箱变量,装箱一个实例<代码>B对象B=新B()代码>
(2) 还有A objectA[]=新的A[10]
分配数组,但不分配数组中的元素,并且ObjectB.ObjectA[0].a=1代码>也会导致NPE。(1)B ObjectB
不创建B
的新实例,它只是装箱变量,装箱一个实例<代码>B对象B=新B()代码>
(2) 还有A objectA[]=新的A[10]
分配数组,但不分配数组中的元素,并且ObjectB.ObjectA[0].a=1代码>也会导致NPE。您尚未初始化ObjectB。没有为ObjectB分配内存。因此显示空指针异常(未向ObjectB引用分配任何内容)
这应该起作用:
C类{
B ObjectB=新的B()
}您尚未初始化ObjectB。没有为ObjectB分配内存。因此显示空指针异常(未向ObjectB引用分配任何内容)
这应该起作用:
C类{
B ObjectB=新的B()
}新的A[10]
实际上并没有创建10A
s。你的ObjectB不是空的吗?@bzlm-好的,我明白了。但是如果我用objecta=new A()替换它,它就可以正常工作。这怎么可能?@PRamesh,这正是我的观点@peshkira-抱歉,一定是B ObjectB=new ObjectB()newa[10]
实际上并没有创建10A
s。你的ObjectB不是空的吗?@bzlm-好的,我明白了。但是如果我用objecta=new A()替换它,它就可以正常工作。这怎么可能?@PRamesh,这正是我的观点@peshkira-抱歉,一定是B ObjectB=new ObjectB();不是真的。虽然他需要这样做,但NPE是由于试图访问ObjectB
中的ObjectA[]
而引起的,该值为空。@PRamesh编辑了我的答案,这应该给你一个正确的示例。不是真的。尽管他需要这样做,但NPE是由于试图访问ObjectB
中的ObjectA[]
而引起的,该值为空。@PRamesh编辑了我的答案,这应该给您一个正确的示例。