Java⾃定义类数组的创建和初始化
刚刚在慕课学习Java的集合类List过程中,向集合中添加元素时,遇到⼀个问题:
定义了⼀个Course类;
public class Course {
private String id;
private String name; //课程名称
//get set⽅法
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
在测试类中有⼀个Course类的List集合allCourses,⼀个向该List集合添加元素的⽅法addToAllCourses() ;
public class ListTest {
private List allCourses; //⽤于存放备选课程的List
//构造函数,初始化allCourses
public ListTest() {
this.allCourses = new ArrayList();
}
public void addToAllCourses(String id, String name) {
//List的add(Object e), 添加⼀个元素
Course cs = new Course(); //创建⼀个Course对象,并设置其参数
cs.setId(id);
cs.setName(name);
allCourses.add(cs);
// List的addAll(Collection c)⽅法
Course[] courses = new Course[3];
courses[0].setId("2");
courses[0].setName("C语⾔");
courses[1].setId("3");
courses[1].setName("数据库");
courses[2].setId("4");
courses[2].setName("计算机⽹络");
allCourses.addAll(Arrays.asList(courses));
java定义一维数组并赋值//在该⽅法中参数必须为collection类型,因此必须⽤⼯具类进⾏类型转换
}
}
主函数测试
public static void main(String[] args) {
ListTest list = new ListTest();
list.addToAllCourses("1", "数据结构");
List<Course> li = AllCourses();
for(int i = 0; i < li.size(); i++) {
System.out.println((i + 1) + ": " + li.get(i).getId()
+ " " + li.get(i).getName());
}
}
乍看是没有问题的,但是⼀运⾏,问题就来了,myeclipse报出了空指针异常。异常抛出点为addToAllCourses()⽅法中 Course类数组courses在赋值时的代码。
既然是空指针异常,也就是说,courses[0], courses[1], courses[2]都是没有被初始化的。
⼀般⽽⾔,如下的数组定义在myeclipse中是不会报错的:
String[] s = new String[3];
s[0] = "000000";
System.out.println(s[0]);
但是,我的代码中,数组的类型为⾃定义的类,⽽⾮Java本⾝提供的类(如String类),因⽽我怀疑是不是我的数组定义出了问题. 查阅资料后发现,⾃定义类的数组定义后的初始化应该如下:
Course[] courses = new Course[3];
courses[0] = new Course();
courses[0].setName("0000000");
System.out.println(courses[0].getName());
也就是说,在声明了⾃定义类的数组之后,对每⼀个数组元素的初始化,都要为其new⼀个对象出来使得指针指向该对象,Java语⾔本⾝是不提供在⾃定义类数组声明时候⾃动创建新对象的⽅式的。
此处顺便再补充⼀下类⼆维数组的定义及初始化,
/*Java提供类*/
//⽅式⼀:
String[][] s = new String[][] { {"a", "b", "c"},
{"d", "e", "f"} };
//⽅式⼆
int r = 0;
String[][] s = new String[2][3];
for (int i = 0; i < 2; i++)
for (int j = 0; j < 3; j++) {
s[i][j] = String.valueOf(r++);
}
/*⾃定义类*/
Course[][] courses = new Course[2][3]; //声明
courses[0][0] = new Course(); //使⽤时new⼀个实例 courses[0][0].setId("0");
courses[0][0].setName("000000");
System.out.println(courses[0][0].getId() + " "
+ courses[0][0].getName());
//测试不报空指针异常
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论