为什么会出现空指针异常?

发布于 2024-12-07 09:16:30 字数 246 浏览 1 评论 0原文

这是场景:

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

又爬满兰若 2024-12-14 09:16:30

(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 of B, 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, and ObjectB.ObjectA[0].a=1; will also cause NPE.

单身狗的梦 2024-12-14 09:16:30

调用 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;
}
}

calling new B() initializes an array of objects of type A, but none of the member objects. You can rectify it first initializing objectB and then calling objectA[i] = new A() for each item in the array.

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;
}
}
固执像三岁 2024-12-14 09:16:30

您尚未初始化 ObjectB。没有内存分配给ObjectB。因此显示空指针异常(没有为 ObjectB 引用分配任何内容)。

这应该有效:

class C {
B 对象B = new B();

public static void main(String[] args) {
    ObjectB.ObjectA[0].a = 1;
}

}

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();

public static void main(String[] args) {
    ObjectB.ObjectA[0].a = 1;
}

}

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文