项目实践精解:Java核心技术应用开发
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

第6章Java基础语法(三):数组

在Java语言中,数组是一种最简单的复合数据类型(引用数据类型)。数组提供了一种将有关联的数据分组的方法。数组是有序数据的集合,数组中的每个元素都具有相同的数据类型,可以用一个统一的数组名和下标来唯一地确定数组中的元素。另外,数组还有一个重要特性,就是它的元素个数是固定不变的,这和我们后面要介绍的集合是有区别的。

数组有一维数组和多维数组之分。我们先来介绍一维数组。

6.1 数组的声明、生成和初始化

创建一个数组不是一个简单的过程,我们需要3个步骤:数组的声明、生成和初始化。

6.1.1 数组的声明

要创建一个数组,必须首先声明数组。通用的一维数组的声明格式如下:

        type var-name[];

其中,type定义了数组的基本类型。基本类型决定了组成数组的每一个基本元素的数据类型。数组的基本类型分为基本类型和引用类型两种,它们的声明格式如下:

        int intArray[]; //基本类型数组
        Date dateArray[]; //引用类型数组

数组还有第二种声明格式,即:

        type[] var-name;

其中,方括号紧跟在类型标识符type的后面,而不是跟在数组名的后面。

上述数组的两种声明方式等价,如下面的两个定义是等价的。

        int intArray[];
        int[] intArray;

6.1.2 数组的生成

尽管我们在上面声明了intArray是一个整型数组,但实际上还没有数组变量存在。为了使intArray数组成为物理上存在的整型数组,必须用运算符new来为其分配地址并且把它赋给intArray。运算符new是专门用来分配内存的运算符。

当运算符new被应用到一维数组时,它的一般形式如下:

        array-var = new type[size];

其中,type指定要分配的数据类型,size指定数组中变量的个数,array-var是要分配内存的数组变量。也就是说,使用运算符new来为数组分配内存,必须指定数组元素的类型和数组元素的个数。用运算符new分配内存后,数组中的元素将会被自动初始化为默认值。另外,数组中的元素个数size是不能改变的,这和我们后面要介绍的集合是有区别的。

下面的例子分配了一个能容纳10个整型元素的内存空间并把它们和数组intArray联系起来。

        intArray = new int[10];

通过这个语句的执行,数组intArray将会指向10个整数,而且数组中的所有元素将被初始化为零。

6.1.3 数组的初始化

让我们回顾一下上面的过程:获得一个数组的第一步,必须定义变量所需的类型;第二步,必须使用运算符new来为数组所要存储的数据分配内存,并把它们和数组变量联系起来。这时候数组中的元素将会被自动初始化为默认值。例如,整型数组中的所有元素将被初始化为零。

这样一来第三步就变得非常重要,也就是数组的初始化。一旦为数组分配了内存,就可以通过在方括号内指定下标来访问数组中特定的元素,并为它们赋初值。所有的数组下标都从零开始。例如,下面的语句将值2赋给数组intArray的第二个元素。

        intArray [1] = 2;

下面的程序显示存储在下标为3的数组元素中的值。

        System.out.println (intArray [3]);

我们再看一看引用类型数组的定义过程。

(1)声明。

        String stringArray[];

(2)生成。

        String stringArray=new String[3]; /*为数组中每个元素开辟引用空间*/

(3)初始化。

        stringArray[0]=new String("How"); //为第一个数组元素开辟空间及赋初值
        stringArray[1]=new String("are"); //为第二个数组元素开辟空间及赋初值
        stringArray[2]=new String("you"); //为第三个数组元素开辟空间及赋初值

下面的实例演示了上述基本概念,其中定义的数组存储了每月的天数。

        /*
        * 演示数组的使用
        *
        */
        package sample;
        public class MonthArrayTest1 {
          public static void main(String args[]) {
        int month_days[];
        month_days = new int[12];
        month_days[0] = 31;
        month_days[1] = 28;
        month_days[2] = 31;
        month_days[3] = 30;
        month_days[4] = 31;
        month_days[5] = 30;
        month_days[6] = 31;
        month_days[7] = 31;
        month_days[8] = 30;
        month_days[9] = 31;
        month_days[10] = 30;
        month_days[11] = 31;
        System.out.println("April has " + month_days[3] + " days.");
          }
        }

该程序的输出结果如下:

        April has 30 days.

另外,数组定义的3个步骤可以合并为一步。数组的初始化(Array Initialize)就是包括在花括号之内用逗号分开的表达式列表,逗号分开了数组元素的值。Java会自动地分配一个足够大的空间来存储所指定的初始化元素的个数,而不必使用运算符new。

例如,上面的演示程序可以改进如下。

        /*
        * 演示数组的使用
        *
        */
        package sample;
        class MonthArrayTest2 {
      public static void main(String args[]) {
            int month_days[] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31,
                30, 31 };
            System.out.println("April has " + month_days[3] + " days.");
      }
        }

当运行这个程序时,你会看到它和前一个程序的输出结果一样。