JAVA创建类类型数组遇到的问题

这是一个在写作业时发现的一个有趣的地方.

当时想测试创建多个对象,于是想到使用类数组,于是模仿整形数组的创建方法凭感觉写出了如下代码:

1
2
3
4
5
6
7
8
9
10
11
12
class BookTest{
public static void test() {
Book[] book=new Book[4];

book[0].setTitle("一本少于200页的测试用书");
book[0].setPageNum(20);
Book.detail(book[0]);

book[1].setTitle("测试用书");
book[1].setPageNum(233);
Book.detail(book[1]);
}

运行结果:Exception in thread “main” java.lang.NullPointerException…….

提示空指针异常.

于是想到类类型数组中的元素为指向对象的指针,和C语言中指针数组相似的概念.使用以上代码创建的只是若干个指针,并没有指向任何对象,因此报错.

然后改成如下代码,使用for循环和new开辟内存空间之后就能对对象属性赋值了.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
class BookTest{
public static void test() {
Book[] book=new Book[4];

for(int i=0;i<book.length;i++) {
/*********初始化 类 类型数组*****************
*
* 类数组的一个元素可以理解为指向一个对象的指针
* 未经初始化直接赋值 运行器会报错
*
* 因为未经初始化,类数组每个元素指向的是非法地址(野指针)造成编译器报错
* 所以要使用new为每一个元素在堆中开辟合法的内存空间
*
*****************************************/
book[i]=new Book("测试用书",0);
}

book[0].setTitle("一本少于200页的测试用书");
book[0].setPageNum(20);
Book.detail(book[0]);

book[1].setTitle("测试用书");
book[1].setPageNum(233);
Book.detail(book[1]);
}