在创建成功一个数组后,它将完成如下三个动作:
创建一个数组对象;
在内存中给数组分配存储空间;
给数组的元素初始化一个相应的数据类型的默认值。比如,将int类型的数组各个元素初始化成0,引用类型是null等。
public class ArrayDf {
public static void main(String[] args) {
int[] intArray;
intArray = new int[10];
System.out.println("第一个元素默认初始化值是:" + intArray[0]);
}
}
在这个程序中,首先声明了一个int类型的数组,然后,利用new操作符创建了一个长度为10的数组,它将给这个数组分配存储空间并且初始化这些数组元素,在这里,讲给这些数组元素一个值0;最后,试图向控制台打印出这个数组第一个元素的值。
因为Java中的数组索引(下标)是从0开始的,所以,第一个数组元素对应的索引为0。所以可以通过intArray[0]的方式来得到数组的第一个元素的值。
编译并运行这个程序,将打印出如下的信息:
第一个元素默认初始化值是:0
其实,此时在这个数组中的任何一个元素的值都是0。读者可以自己修改数组的索引来获得不同的数组元素,注意这个数组的索引取值在0~9之间。
但是,通常情况下,我们定义一个数组并不是想用系统自动给的默认值,而是我们自己给数组的值。这个时候,就需要对数组进行初始化操作。也就是说,给数组的各个元素指定象赢得值。
数组的初始化操作分为两种方式:
静态初始化;
动态初始化。
下面我们来看这两种初始化方式的方法以及它们的区别。
静态初始化
所谓静态初始化,就是在定义数组的时候就对数组进行初始化,如下:
int k[] = {1,3,5,7,9};
在这个例子中,定义了一个int类型的数组k,并且用大括号中的数据对这个数组进行了初始化,各个数据之间用“,”分割开。
此时数组的大小由大括号中的用于初始化数组的元素个数决定,注意不要在数组声明中指定数组的大小,否则将会引起错误。
在这个例子中,我们将数组声明、数组的创建以及数组的初始化都放在了同一条语句中,在这边并没有使用到new来创建这个数组。
来看一个静态初始化的例子:
public class StaticInitArray {
public static void main(String[] args) {
int a[] = { 1, 3, 5, 7, 9, 11 };
for (int i = 0; i < a.length; i++) {
System.out.println(a[i]);
}
}
}
在这个例子中,利用静态方式对数组进行初始化。这个数组的长度是数组中的元素的个数:6。然后用一个for循环将数组的各个元素取出来打印到控制台。程序执行的结果如下:
1
3
5
7
9
11
注意在这边用到了前面所论述的用于获得数组长度的方法:使用数组的length属性,用它来获得数组的长度。
在Java中,还可以利用静态初始化的方法来初始化一个匿名的数组,方法如下:
new type[] {… …}
例如:new String[] {“abc”,”cde”,”efg”}
可以通过这种方法来重新初始化一个数组,例如,有一个String类型的数组,它通过下面的静态方式被初始化:
String[] s = {“tom”,”jerry”,”mickey”};
此时,可以对s这个数组变量进行重新初始化,如下:
s = new String[]{“abc”,”cde”,”efg”};
这条语句等同于下面的两条语句:
String[] temp = {“abc”,”cde”,”efg”};
s = temp;
动态初始化
所谓的动态初始化,就是将数组的定义和数组的初始化分开来进行。
例如,对数组中的元素一个个的分别指定它们各自对应的值:
int a = new int[3];
a[0] = 1;
a[1] = 10;
a[2] = 100;
或者用一个循环来对一个数组一次赋值,如:
int[] a;
a = new int[10];
for (int i = 0;i<10;i++){
a[i] = 2*i+1;
}
再来看一个char类型数组的动态初始化的例子:
char[] s;
s = new char[26];
for ( int i=0; i<26; i++ ) {
s[i] = (char) ('A' + i);
}