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

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是空的,会报空指针。

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

报告相同问题?