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]
实际上并没有创建10
A
s。你的ObjectB不是空的吗?@bzlm-好的,我明白了。但是如果我用objecta=new A()替换它,它就可以正常工作。这怎么可能?@PRamesh,这正是我的观点@peshkira-抱歉,一定是B ObjectB=new ObjectB()
newa[10]
实际上并没有创建10
A
s。你的ObjectB不是空的吗?@bzlm-好的,我明白了。但是如果我用objecta=new A()替换它,它就可以正常工作。这怎么可能?@PRamesh,这正是我的观点@peshkira-抱歉,一定是B ObjectB=new ObjectB();不是真的。虽然他需要这样做,但NPE是由于试图访问
ObjectB
中的
ObjectA[]
而引起的,该值为空。@PRamesh编辑了我的答案,这应该给你一个正确的示例。不是真的。尽管他需要这样做,但NPE是由于试图访问
ObjectB
中的
ObjectA[]
而引起的,该值为空。@PRamesh编辑了我的答案,这应该给您一个正确的示例。