站内搜索: 请输入搜索关键词

当前页面: 开发资料首页J2SE 专题实例化类对象数组的异常

实例化类对象数组的异常

摘要: 实例化类对象数组的异常


我本来是搞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;
}
}


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



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();


正如上面两位所述!


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


因为char是非对象类型


jf.com
gx.com


揭贴了


恩。。 学习了 顶下


其实是这样的,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维,道理都是一样


初来此地,弄了半天才搞清楚什么是“揭帖”。抱歉。


↑返回目录
前一篇: JAVA RPC exception
后一篇: jdk的安装!请教