数组的初始化
来源:互联网 发布:最大软件供应商 编辑:程序博客网 时间: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;
}
}
就没问题了
- C#数组-数组的初始化
- 数组,以及数组的初始化
- 数组初始化的位置
- 数组的初始化方式
- 初始化数组的方法
- 谈 数组的初始化
- 数组的智能初始化
- 对象数组的初始化
- 数组的初始化方式
- 字符数组的初始化
- 关于数组的初始化
- 数组的智能初始化
- 数组的初始化
- 数组的初始化
- 指针数组的初始化
- 字符数组的初始化
- 数组的初始化问题
- 数组的初始化
- 悟
- Thinking in Java笔记1
- finalize()在什么时候被调用?
- this
- 对象初始化
- 数组的初始化
- JAVA中几个易混淆关键词的正确理解
- 对象和简单数据对象
- Collection接口
- List接口
- LinkedList类
- ArrayList类
- Stack类
- List接口各实现类的区别