
6.1 数组定义

数组是指一组相关变量的集合。例如,如果说现在要想定义100个整型变量,按照传统的思路,可能这样定义:

以上的形式的确可以满足技术要求,但是这里有一个问题,这100个变量没有任何逻辑控制关系,各个变量完全独立,就会出现不方便管理变量的问题。那么在这种情况下就可以利用数组来解决此类问题,而数组本身也属于引用数据类型,所以数组的定义语法如下。
声明并开辟数组(“[]”可以定义在数组名称前也可以定义在数组名称后)。

分步完成。

当数组开辟空间之后,那么可以采用“数组名称[下标|索引]”的形式进行访问,但是所有数组的下标都是从0开始的,即如果是3个长度的数组,则下标可用范围:0~2(0、1、2一共是3个内容)。如果访问的时候超过了数组的允许下标的长度,那么会出现数组越界异常(java.lang.ArrayIndexOutOfBoundsException)。
以上给出的数组定义结构使用的是动态初始化的方式,即数组首先开辟内存空间,但是数组中的内容都是其对应数据类型的默认值,如果现在声明的是int型数组,则数组里面的全部内容都是其默认值:0。
由于数组是一种顺序结构,并且数组的长度都是固定的,那么可以使用循环的方式输出,很明显需要知道for循环。而且,Java为了方便数组的输出,提供了一个“数组名称.length”属性,可以直接取得数组长度。
范例:定义并使用数组

本程序利用数组动态初始化开辟了3个长度的数组内容,并且为数组中的每一个元素进行初始化。由于数组的长度是固定的,所以使用了for循环实现了数组的访问下标控制实现了数组内容的输出。
数组核心的操作就是声明并分配内存空间,而后根据索引进行访问。但是需要注意的是,数组属于引用数据类型,代码中需要进行内存分配。数组与对象保存唯一的区别在于:对象中的堆内存保存的是属性,而数组中的堆内存保存的是一组信息,以上程序的内存划分如图6-1所示。

图6-1 数组内存处理
数组本身分为动态初始化与静态初始化,以上范例使用的是动态初始化,动态初始化后会发现数组中的每一个元素的内容都是其对应数据类型的默认值,随后可以通过下标为数组设置内容。如果希望定义数组的时候就设置其内容,则可以采用静态初始化的方式完成。
范例:使用静态初始化定义数组

本程序采用静态初始化,在数组定义时就为其设置了具体的数据内容,避免了先开辟后赋值的重复操作。
注意:关于数组的使用问题。
数组最大的方便之处在于可以使用线性的结构保存一组类型相同的变量,但是从另一个角度来讲,传统数组最大的缺陷在于其保存的数据个数是固定的,正是由于这一点,在许多项目开发中会大量地通过类集框架(Java中提供的数据结构实现)实现动态数组的操作,但这并不意味着在项目中完全不使用数组,因为在一些数据的处理上还是要大量地采用数组。