数组的初始化

来源:互联网 发布:最大软件供应商 编辑:程序博客网 时间:2024/04/26 19:05

数组的初始化

数组包括基本数据类型数组和对象数组,其中对于对象数组的初始化,经常会出现"Exception"错误.比如下面的程序



问题代码如下:

public userInfo[] getUsersInfo() {



userInfo[] usersInfo=null;



if (users.size()!=0) {

usersInfo=new userInfo[users.size()];



for(int i=0;i< usersInfo.length;i++) {

//+-------------------出问题的地方-----------------

usersInfo[i].name=((User)(users.elementAt(i))).name;

usersInfo[i].type=((User)(users.elementAt(i))).type;

usersInfo[i].userID=((User)(users.elementAt(i))).userID;

//+-------------------出问题的地方-----------------

}

System.out.println("here");

return usersInfo;

}else {

return null;

}

}



其中userInfo的定义为

class userInfo{

userInfo(String name,int type,int userID){

this.name=name;

this.type=type;

this.userID=userID;

}

String name;

int type;

int userID;

}



运行到程序中标出的问题区域时,系统显示NullPointerException,为什么会这样呢?



这是因为,Java在定义数组的时候

usersInfo=new userInfo[users.size()];

并没有给数组元素分配内存,它只是一个句柄数组,数组中的对象还没有初始化.因此数组中的每个对象都需要new之后才可以访问.例如:

A[] a=new A[2];

for(int i=0;i<2;i++)

a[i] = new A();

这样才能a[i].someMethod()



因此上面的程序应该改为



public userInfo[] getUsersInfo() {



userInfo[] usersInfo=null;



if (users.size()!=0) {

usersInfo=new userInfo[users.size()];



for(int i=0;i< usersInfo.length;i++) {

//+-------------------修改的地方-----------------

usersInfo[i]=new userInfo(((User)(users.elementAt(i))).name,

((User)(users.elementAt(i))).type,

((User)(users.elementAt(i))).userID);

}

//+-------------------修改的地方-----------------

return usersInfo;

}else {

return null;

}

}

就没问题了

原创粉丝点击