
上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] = "钱八";