Java中数组的初始化的含义
引用数组的定义为(如果不是基本的数据类型):
Obj[] a=new obj[size]
下面首先来看这个例子
class showstr{
public void show(){
System.out.println("hello!");
}
}
public class Arraytest {
public static void main(String[] args) {
showstr[] a=new showstr[10];
for(int i=0;i<a.length;i++)
{
a[i].show();
}
}
}
这段代码会运行正常吗?
答案是不会,因为辉抛出异常,因为在数组的定义得时候,showstr[] a=new showstr[10]这句话调用的是数组对象的构造函数,而不是showstr的构造函数,在程序中,首先要加上对每个数组对象的初始化才能使用,例子如下
class showstr{
public void show(){
System.out.println("hello!");
}
}
public class Arraytest {
public static void main(String[] args) {
showstr[] a=new showstr[10];//这句话只是调用了数组的构造函数,返回队中的一个地址,而不是showstr的构造函数
for(int i=0;i<a.length;i++)
{
a[i]=new showstr();//如果要调用对象中的函数,需要先对其进行初始化
a[i].show();
}
}
}
Java里面真的是一切皆对象啊!数组都是对象。例如String s1[] = new String[5];也是返回堆中一个地址,也要调用构造函数,只不过不是String类的构造函数而是这个数组对象类的构造函数。不能习惯的认为此处的构造函数是String类的构造函数,没有把它当成数组对象的一种定义来看待。