为什么会出现空指针异常?
这是场景:
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;
}
}
我在主操作中遇到空指针异常。但是,如果我只声明 A 类的一个对象,则不会收到错误。为什么会这样呢?我该如何纠正?
This is the scenario:
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;
}
}
I get a nullpointerexception in main operation. However if I declare just one object of class A, I don't get the error. Why so? How do I rectify it?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
(1)
B ObjectB;
不会创建B
的新实例,它只是创建变量,创建实例;B ObjectB = new B();
(2) 另外
A objectA[]=new A[10] ;
分配数组,但不分配数组中的元素,并且 < code>ObjectB.ObjectA[0].a=1;也会导致NPE。(1)
B ObjectB;
does not create a new instance ofB
, it just crate the variable, to crate an instance;B ObjectB = new B();
(2) Also
A objectA[]=new A[10] ;
allocates the array, but not elements in the array, andObjectB.ObjectA[0].a=1;
will also cause NPE.调用
new B()
会初始化A
类型的对象数组,但不会初始化任何成员对象。您可以先初始化objectB
然后为数组中的每个项目调用objectA[i] = new A()
来纠正它。calling
new B()
initializes an array of objects of typeA
, but none of the member objects. You can rectify it first initializingobjectB
and then callingobjectA[i] = new A()
for each item in the array.您尚未初始化 ObjectB。没有内存分配给ObjectB。因此显示空指针异常(没有为 ObjectB 引用分配任何内容)。
这应该有效:
class C {
B 对象B = new B();
}
You have not initialized the ObjectB. There is no memory allocated to ObjectB. Hence showing null pointer exception (Nothing is allocated to ObjectB reference).
This should work:
class C {
B ObjectB = new B();
}