如下代码,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();//空指针异常
}
//总结,只能在函数里用。出了函数会消失
}
把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是空的,会报空指针。