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

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 求差集那个函数有问题,有无佬可以解决
  • ¥15 【提问】基于Invest的水源涵养
  • ¥20 微信网友居然可以通过vx号找到我绑的手机号
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名
  • ¥65 汇编语言除法溢出问题