现在的位置: 首页 > 综合 > 正文

知识准备:一维数组的初始化

2018年03月20日 ⁄ 综合 ⁄ 共 2476字 ⁄ 字号 评论关闭

http://book.2cto.com/201210/7718.html

 

Java数组的初始化主要分为两种:静态初始化和动态初始化。在了解这两种初始化方式之前,先看一下Java提供的数组默认初始化。

Java为了保证安全性,防止内存缺失,为已创建的数组提供了默认初始化机制。在创建成功一个数组后,将完成如下3个动作:

 创建一个数组对象。

 在内存中给数组分配存储空间。

 给数组的元素初始化一个相应的数据类型的默认值。比如,将int类型的数组各个元素初始化为0,引用类型是null等。

将任务一中的程序稍做修改,让它打印出数组第一个元素的默认值:

源文件:NumberLength.java

public class NumberLength {

 public static void main(String[] args) {

  int[] numberArray;

  numberArray = new int[6];

  System.out.println("请输入长度为" + numberArray.length+"位开机密码");

  System.out.println("第一位密码默认初始化值是:" + numberArray[0]);

 }

}

在这个程序中,首先声明了一个int类型的数组,然后,利用new操作符创建了一个长度为6的数组,它将给这个数组分配存储空间并且初始化这些数组元素,在这里将给这些数组元素一个值0;最后,试图向控制台打印出这个数组第一个元素的值,因为Java中的数组索引(下标)是从0开始的,所以,第一个数组元素对应的索引为0,所以可以通过numberArray [0]的方式来得到数组的第一个元素的值。

编译并运行这个程序,将打印出如下的信息:

请输入长度为6位开机密码

第一位密码默认初始化值是:0

其实,此时在这个数组中的任何一个元素的值都是0。读者可以自己修改数组的索引来获得不同的数组元素,注意这个数组的索引取值在0~10之间。

但是,通常情况下,定义一个数组并不是想用系统自动给的默认值,而是自己给数组的值。这时,就需要对数组进行初始化操作。也就是说,给数组的各个元素指定对象的值。

下面来看静态和动态这两种初始化方式的方法及它们的区别。

1)静态初始化

所谓静态初始化,就是在定义数组的时候就对数组进行初始化,如下:

 int k[] = {1,3,5,7,9};

在这个例子中,定义了一个int类型的数组k,并且用大括号中的数据对这个数组进行了初始化,各个数据之间用“,”分割开。此时数组的大小由大括号中的用于初始化数组的元素个数决定,注意不要在数组声明中指定数组的大小,否则将会引起错误。在这个例子中,将数组声明、数组的创建及数组的初始化都放在了同一条语句中,在这边并没有使用到new来创建这个数组。其等同于

 int k[] =new int[5]

   k[] = {1,3,5,7,9};

来看一个静态初始化的例子:

源文件:StaticOpenNunber.java

public class StaticOpenNunber {

 public static void main(String[] args) {

  int numberArray[] = { 6, 5, 4, 3, 2, 1 };

  System.out.println("默认开机密码为");

  for (int i = 0; i < numberArray.length; i++) {

   System.out.println(numberArray[i]);

  }

 }

}

在这个例子中,利用静态方式对数组进行初始化。这个数组的长度是数组中的元素的个数:6。然后用一个for循环将数组的各个元素取出来打印到控制台。程序执行的结果如下:

默认开机密码为654321

注意在这边用到了前面所论述的用于获得数组长度的方法:使用数组的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[10]={0,1,2,3,4};

只给前5个元素赋值,后5个元素为0。

初始化之后:a[0]=0,a[1]=1,a[2]=2,a[3]=3,a[4]=4,a[5]=0,…,a[8]=0,a[9]=0。

对全部数组元素赋初值时,可以不指定数组长度。例如:

int a[]={1,2,3,4,5};

上面的写法中,{ }中只有5个数,系统会据此自动定义数组的长度为5。初始化之后:a[0]=1,a[1]=2,a[2]=3,a[4]=4,a[5]=5。如果被定义的数组长度与提供初值的个数不同,则数组长度不能省略。例如:

想定义数组长度为10,就不能省略数组长度的定义。而必须写成:

int a[10]={ 1,2,3,4,5};

只初始化前面5个元素,后5个元素为0。不能写成:

int a[ ]={1,2,3,4,5};

2)动态初始化

所谓动态初始化,就是将数组的定义和空间分配与给数组元素赋值分开。创建时系统进行数组的默认初始化。例如,对数组中的元素一个个地分别指定它们各自对应的值,这些赋值可以在程序的任意位置:

char ch = new char[3];

ch[0] = a;

ch[1] = b;

ch[2] = c;

或者用一个循环来对一个数组一次赋值,例如:

    char[] ch;

    ch = new char[26];

    for ( int i=0; i<26; i++ ) {

      ch[i] = (char) ('A' + i);

    }

 

 

 

抱歉!评论已关闭.