第八章  数组

  1. 定义:在Java中,数组是具有相同数据类型的有序数据的集合,它是一个对象。数组中的每个数据称为数组元素,通过下标访问。数组分为一维数组和多维数组。

  2. 一维数组的声明:声明一个数组仅指定了数组名和元素的数据类型,并未指定数组元素的个数和初始值,此时系统不会为数组分配内存空间。一维数组的声明格式如下:

    数据类型[] 数组名;  或者  数据类型 数组名[];

  3. 一维数组的初始化:数组声明后需要初始化才可以使用,通过初始化可以为数组分配内存空间,或者为数组元素赋值。数组的初始化分为静态初始化和动态初始化。

    (1)静态初始化:声明数组的同时为数组元素赋值。无需指定数组的大小,系统会根据元素的个数自动算出数组长度,并分配内存空间。适用于元素个数不多或可列举的情况。语法格式如下:

     数据类型[] 数组名 = {元素1初值, 元素2初值, 元素3初值...};

    (2)动态初始化:指利用new运算符为数组分配内存空间。此时数组的声明和初始化时分开进行的。常用于数组元素较多或无法列举的情况。语法格式如下:

    数据类型[] 数组名;

    数组名 = new 数据类型[数组长度]; 也可写成一句:数据类型[] 数组名=new 数据类型[数组长度];

  4. 一维数组的使用:数组名[数组下标];

    (1)数组下标用来唯一标识数组中的每一个元素,可以是整数或表达式。Java中所有数组下标都是从0开始到“数组长度-1”结束。

    (2)数组对象有length属性表示数组长度。

  5. 二维数组声明:数据类型[][] 数组名; 或 数据类型 数组名[][];

  6. 二维数组的初始化:静态初始化和动态初始化

    (1)静态初始化:在声明数组的同时给元素赋初值。例如:

     int a[][] = {{12},{54,63},{123,456}};

    二维数组也可以看做是一维数组的数组,如上述例子,数组a是由3个长度不同的一维数组组成的二维数组。

    (2)动态初始化:用new关键字为数组分配内存空间,指定数组元素的行数和列数,但不给数组赋初值。二维数组的动态初始化有两种方式:

    a.直接方式:在初始化时直接指定行数和列数,适用于数组的每行的列数都相同的情况。例如:

    int a[][] = new int[3][2];

    b.逐级方式:首先为二维数组分配行数,再为每一行分配列数。例如:

    int a[][] = new int[2][];    //定义一个两行的二维数组

    a[0] = new int[1];           //定义第一行a[0]为1个元素

    a[1] = new int[2];           //定义第二行a[1]为2个元素

  7. 二维数组的使用:二维数组的使用方法与一维数组使用方法相似,都是用下标标识数组中的每一个元素。每一维的下标也是从0开始。语法格式为:数组名[数组下标1][数组下标2];

  8. 对象数组:数组元素的类型为类对象的数组称为对象数组。对象数组的定义与基本类型数组的定义在形式上是一致的。

    (1)定义对象数组时,只是创建了数组对象引用,并未对对象元素初始化,也为给对象数组分配内存空间,因此在定义对象数组后,还要对其初始化。

    (2)对象数组中的每个元素都是一个对象,因此可以使用运算符"."访问对象中的成员。

  9. 数组作为方法的参数:在Java中,数组可以作为方法的参数传递。数组作为方法的参数时传递的是引用,因此实参和形参拥有相同的内存空间。若在方法中更改了形参的值,实参的值也将被改变。

    (1)数组作为形参时,数组名后的括号不能省略,括号的个数和数组的维数相等,不需要给出数组元素的个数。

    (2)数组作为实参时,数组名后的括号要省略。

    (3)数组元素也可以作为方法的参数传递,此时传递的是数值,在形参中更改形参的值,实参的值不会被更改。