我本来是搞C/C++,最近对JAVA产生浓厚兴趣,可是刚开始就被难住了,哪位先知帮忙解释下:
public class ClassmatesCommunicate {
private class ClassInfo{
public int Num;
public String Name;
public int Age;
public double Hight;
public ClassInfo(){
Num = 0;
Name = "";
Age = 24;
Hight = 1.68;
}
}
private ClassInfo[] Info;
public void CreateClassInfo(){
try{
Info = new ClassInfo[100];/*会产生异常,为什么??*/
for(int i = 0 ; i<100;i++){
System.out.println(Info[i].Hight);
System.out.println(Info[i].Age);
System.out.println(Info[i].Name);
System.out.println(Info[i].Num);
Info[i].Age = (i+20)&30;
Info[i].Hight =(Info[i].Age/100.0+1);
Info[i].Num = i;
Info[i].Name ="wang"+String.valueOf(i);
System.out.println(Info[i].Hight);
System.out.println(Info[i].Age);
System.out.println(Info[i].Name);
System.out.println(Info[i].Num);
}
}
catch(NullPointerException e){
System.out.println("Error!");
System.out.println(e);
}  public static void UsingPack(){
ClassmatesCommunicate CC = new ClassmatesCommunicate();
CC.CreateClassInfo();
boolean a = false;
}
}

解决方案 »

  1.   

    错误在for循环里,循环里使用的所有的Info[i]对象都是空,所以会抛空指针异常!
      

  2.   

    Info = new ClassInfo[100];这一句只是实例化了一个数组对象Info,而数组里的内容却是空的!
    创建对象数组的时候,在Info = new ClassInfo[100];实例化完数组对象以后,数组里的每个对象都必须实例化才能使用!如:  Info = new ClassInfo[2];
      Info[0] = new ClassInfo();
      Info[1] = new ClassInfo();所以在你的循环里的第一句加上:
      Info[i] = new ClassInfo();
      

  3.   

    谢谢指点。初学,受教。
    char[] a = new char[100];怎么不用每个都实例化呢?
      

  4.   

    其实是这样的,java的数组和c++不同,Xxx x = new Xxx[n];只是分配了连续n个元素的空间,每个元素的类型都是Xxx(或者其子类型),每个元素的初始值都是零,即:整型的0,浮点型的0.0,字符型的'\0',布尔型的false,以及对象类型的null对于多维数组,Xxx[][] x其实质是一个一维数组(Xxx[])[],即每个元素的类型是Xxx[]的一个一维数组(java中Xxx[]和Xxx是两种类型,因此符合Java思想的正确写法是String[] args而不是String args[])。由此推广到三维,四维乃至N维,道理都是一样