BobAlice 2019-05-17 10:02 采纳率: 100%
浏览 1000
已采纳

Java 以对象数组为类的成员的问题(空指针异常)

如下代码,New以对象数组Hi[]为成员,在New的构造方法里已经正确创建了Hi[0],在构造方法调用Hi[0].Hello也没问题。但为什么在sayHello里调用Hi[0].Hello会提示空指针异常?
莫非在构造函数外Hi[0]会消失?

class Hi{
    void Hello(){
        System.out.println("Hello");
    }
}

class New{
    Hi[] NewHi;
    New(){
        Hi NewHi[] = new Hi[2];
        NewHi[0]=new Hi();
        NewHi[0].Hello();
    }
    void sayHello(){
        if(NewHi[0]==null){System.out.println("New[0]消失");}
        else NewHi[0].Hello();
    }
}
public class Test{
    public static void main(String args[]){
        Hi hi[] = new Hi[2];
        hi[0]=new Hi();
        hi[0].Hello();
//在函数里可以
        New niao = new New();//在构造函数里行
        //niao.NewHi[0].Hello();   这一句不行
        niao.sayHello();//空指针异常
    }
    //总结,只能在函数里用。出了函数会消失
}
  • 写回答

1条回答 默认 最新

  • 可以简单点 2019-05-17 10:40
    关注

    把New类的构造方法改成 New(){
    NewHi = new Hi[2];
    NewHi[0]=new Hi();
    NewHi[0].Hello();
    }
    因为你已经定义了成员变量Hi[] NewHi; 在构造方法中用NewHI这个成员变量接收就可以了,按照你原来的写法,成员变量没有被赋值,
    在其他方法中是调用不了的。你 的New类的构造方法中这一句代码:Hi NewHi[] = new Hi[2];并没有把值赋给成员变量Hi[] NewHi;,
    所以NewHi是空的,会报空指针。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 如何让企业微信机器人实现消息汇总整合
  • ¥50 关于#ui#的问题:做yolov8的ui界面出现的问题
  • ¥15 如何用Python爬取各高校教师公开的教育和工作经历
  • ¥15 TLE9879QXA40 电机驱动
  • ¥20 对于工程问题的非线性数学模型进行线性化
  • ¥15 Mirare PLUS 进行密钥认证?(详解)
  • ¥15 物体双站RCS和其组成阵列后的双站RCS关系验证
  • ¥20 想用ollama做一个自己的AI数据库
  • ¥15 关于qualoth编辑及缝合服装领子的问题解决方案探寻
  • ¥15 请问怎么才能复现这样的图呀