数组是由多个类型相同的数据按照一定顺序排列的集合,并使用一个名字命名,并通过编号的方式对数据进行管理。
- 数组名
- 元素
- 索引
- 数组长度
- 数组是有序排列的
- 数组本身是引用数据类型,数组元素可以是任意类型(基本数据类型和引用数据类型)
- 创建一个数组会在内存中开辟一整块连续的空间
- 数组的长度一确定就不可修改
- 按维数分,一维数组、二维数组...
- 按数组元素数据类型分,基本数据类型元素的数组、引用数据类型元素的数组
① 声明
int[] ids; String[] names
② 初始化
-
静态初始化:数组的初始化和数组元素的赋值同时进行
int[] ids = new int[]{1000,1001,1002,1003}; String[] names = new String[] {"A","B","C","D"};
-
动态初始化:数组的初始化和数组元素的赋值分开进行
int ids = new int[4]; String[] names = new String[5];
-
类型推断:特殊情况
int[] ids = {1000, 1001, 1002}; int ids[] = new int[4];
-
数组一旦初始化,长度就不变。
通过索引方式调用,索引由 0 至 array.length - 1
属性:length array.length
- 数组元素为整型 :
0 - 数组元素为浮点型:
0.0 - 数组元素为
char型:0、\0或\u0000(表现为空格但不是空格) - 数组元素为
boolean型:false - 数组元素为引用数据类型( 比如
String) 型:null
一维数组的首地址存放在 栈 中,而栈中首地址指向的数组元素存放在 堆 中
声明数组的时候,首地址就已经在 栈 中确定了,数组元素存放的位置已经需要的内存空间也都在 堆 中确定。
若重新声明一维数组,则数组首地址将改变,原数组元素成为 内存垃圾 。
Java 提供 foreach 循环对数组进行遍历
语法:
for (elementType e: arrayName) {
// some code.
}举例:
int[] arr4 = new int[] {12, 31, 23, 25};
for (int e: arr4) {
System.out.println(e);
} 一个数组作为另一个数组的元素而存在。
其实,从数组底层的运行机制来看,并没有多维数组。
-
静态初始化
int[][] arr1 = new int[][]{{1,2,3}, {4,5,6}, {7,8,9}};
-
动态初始化1
String[][] arr2 = new String[3][4];
-
动态初始化2
String[][] arr3 = new String[3][]; -
非标准形式
String[] arr4[] = new String[3][4]; String arr5[][] = new String[3][4];
-
错误示范
int[][] arr6 = new int[][3]; String[3][4] arr7 = new String[][]; int[][] arr8 = new int[3][3]{{1,2,3}, {4,5,6}, {7,8,9}};
String[][] arr9 = new String[3][];
arr1[2] = new String[4]; // 在第3行定义了一个长度为4的数组
System.out.println(arr1[2][2]); //nullint[][] arr10 = new int[][]{{1,2}, {3,4,5,6}, {7,8,9}};
System.out.println(arr10.length); // 3
System.out.println(arr10[0].length); // 2
System.out.println(arr10[1].length); // 4for (int i = 0;i < arr11.length;i+=) {
for (int j = 0;j < arr11[i].length;j++) {
System.out.print(arr11[i][j] + "\t");
}
System.out.println();
}-
规定
二维数组分为外层数组的元素,内层数组的元素
int[][] arr = new int[i][j];
外层元素:
arr[i]内层元素:
arr[i][j] -
默认初始化值
-
初始化方式一:
int[][] arr = new int[i][j];外层元素初始化值:地址值
内层元素初始化值:与一维数组初始化情况同
-
初始化方式二:
int[][] arr = new int[i][];外层元素初始化值:
null内层元素:外层不指向任何数组,不能调用,否则报错
-
参考一维数组内存分析