Java编程讲义
上QQ阅读APP看书,第一时间看更新

4.2.2 二维数组的内存分配

二维数组创建之后,就可以存储数据到其元素空间中。二维数组元素的赋值方式与一维数组类似,也是3种方式:静态初始化、动态初始化、通过数组下标为数组赋值。

1.静态初始化

二维数组的静态初始化就是在声明数组时,由开发者显式指定二维数组元素的初始值。因为二维数组有两个维度,所以在设置数据时,要使用两层大括号来体现两个维度的结构。如下是两种二维数组静态初始化的语法:

    // 声明数组的同时初始化,外面的大括号表示第一维元素,里面的大括号表示第二维元素
    数据类型[][] 数组名 = {{数据1,数据2,…},{数据1,数据2,…},…};
    // 先声明二维数组,然后进行初始化
    数据类型[][] 数组名;
    数组名 = new 数据类型[][]{{数据1,数据2,…},{数据1,数据2,…},…};

上述语法中,二维数组静态初始化时,初始化的数据要写在两层大括号中,这是与一维数组不同的地方。第1层大括号中定义的是第一维的数组元素,这些数组元素本身又是一个数组,元素之间以逗号分隔。第2层大括号中存储的是实际的数据内容,多个数据之间也以逗号分隔。另外,在第2种静态初始化语法中,右边表达式中的“[ ][ ]”内,也不允许写数组长度,否则会发生语法错误。

二维数组静态初始化示例代码如下:

    int[][] scores = {{78,65},{98,79},{87,89}};   // 声明数组并进行静态初始化
    int[][] scores;                 // 先声明数组变量
    scores = new int[][]{{78,65},{98,79},{87,89}};  // 再进行静态初始化

2.动态初始化

二维数组进行动态初始化时,开发者需要指定两个维度的数组长度,然后由系统自动为数组元素分配初始值。二维数组动态初始化的语法格式如下:

    数据类型[][] 数组名 = new 数据类型[第一维数组长度][第二维数组长度];

二维数组在进行动态初始化后,程序会根据指定的两个维度的数组长度,创建对应的数组元素空间,并为每个数组元素空间设置初始值。

二维数组动态初始化的代码示例如下:

    int[][] scores = new int[3][2];     // 创建3行2列的整型二维数组,元素的初始值都是0
    String[][] names = new String[3][2];  // 创建3行2列的字符串二维数组,元素的初始值都为null

3.通过数组下标为数组赋值

在二维数组创建之后,可以使用数组名结合二维数组行列下标的方式,为二维数组空间中的每个元素赋值。使用二维数组下标赋值的语法格式如下:

    数据类型[][] 数组名 = new 数据类型[第一维数组长度][第二维数组长度];
    数组名[第一维度下标][第二维度下标] = 数值;

在通过数组下标为数组元素赋值时,每个维度的数组下标的取值范围从0到对应维度的数组长度减1为止。下标超出这个范围,会发生“ArrayIndexOutOfBoundsException”数组下标越界的异常。

通过数组下标为元素赋值的示例代码如下:

    String[][] names = new String[3][2];  // 声明3行2列字符串二维数组
    names[0][0] = "张三";         // 通过2个维度的下标为每个数组元素赋值
    names[0][1] = "李四";
    names[1][0] = "王五";
    names[1][1] = "赵六";
    names[2][0] = "孙七";
    names[2][1] = "钱八";