数组介绍
数组就是存储数据长度固定的容器,存储多个数据的数据类型要一致。
数组的定义
第一种格式
数据类型[] 数组名
示例:
int[] arr;
double[] arr;
char[] arr;
第二种格式
数据类型 数组名[]
示例:
int arr[];
double arr[];
char arr[];
数组的静态初始化
什么是初始化
就是在内存中,为数组容器开辟空间,并将数据存入容器中的过程。
静态初始化格式
-
完整版格式
数据类型[] 数组名 = new 数据类型[]{元素1,元素2,...};
-
简化版格式
数据类型[] 数组名 = {元素1,元素2,...};
示例代码:
// 数据类型[] 数组名 = new 数据类型[]{元素1, 元素2, 元素2...};
// 创建了一个int类型的数组, 数组名叫arr, 数组中存储了 11 22 33 这个三个数据.
int[] arr = new int[]{11, 22, 33};
System.out.println(arr);
// 数据类型[] 数组名 = {元素1, 元素2, 元素2...};
double[] dArr = {12.3, 22.3, 33.3};
System.out.println(dArr);
数组元素访问
什么是索引
每一个存储到数组的元素,都会自动的拥有一个编号,从0开始。
这个自动编号称为数组索引(index),可以通过数组的索引访问到数组中的元素。
访问数组元素格式
数组名[索引];
示例代码:
int[] arr = {11, 22, 33, 44, 55};
// 需求1: 将元素44取出来打印在控制台
System.out.println(arr[3]);
// 需求2: 修改0号元素位置元素为66, 修改后取出并打印.
arr[0] = 66;
System.out.println(arr[0]);
数组遍历
概念:
遍历:将数组中所有的内容取出来,取出来之后可以(打印,求和,判断..)。
注意事项:
-
遍历指的是取出数据的过程,不要局限的理解为,遍历就是打印!
-
数组的长度属性:arr.length
-
IDEA快速生成遍历的方式:数组名 + fori 回车
代码示例:
int[] arr = {11, 22, 33, 44, 55, 33, 44, 55, 33, 44, 55, 33, 44};
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
数组动态初始化
什么是动态初始化
数组动态初始化就是只给定数组的长度,由系统给出默认初始化值
动态初始化格式
数据类型[] 数组名 = new 数据类型[数组长度];
int[] arr = new int[3];
10.6.3 动态初始化格式详解
-
等号左边:
-
int:数组的数据类型
-
[]:代表这是一个数组
-
arr:代表数组的名称
-
-
等号右边:
-
new:为数组开辟内存空间
-
int:数组的数据类型
-
[]:代表这是一个数组
-
5:代表数组的长度
-
代码 :
// 数据类型[] 数组名 = new 数据类型[数组的长度];
int[] arr = new int[3];
System.out.println(arr[0]); // 0
System.out.println(arr[1]); // 0
System.out.println(arr[2]); // 0
arr[0] = 11;
arr[1] = 22;
arr[2] = 33;
System.out.println(arr[0]); // 0
System.out.println(arr[1]); // 0
System.out.println(arr[2]); // 0
数组常见两个小问题
索引越界异常
当访问了数组中不存在的索引,就会引发索引越界异常。
代码示例:
int[] arr = {11, 22, 33};
System.out.println(arr[0]);
System.out.println(arr[1]);
System.out.println(arr[2]);
System.out.println(arr[10]);//当访问了数组中不存在的索引,就会引发索引越界异常。
核心点:
要知道索引的范围。
-
最小索引:0
-
最大索引:数组的长度 - 1
空指针异常
当引用数据类型变量被赋值为null之后,地址的指向被切断,还继续访问堆内存数据,就会引发空指针异常
代码示例:
int[] arr = new int[2];
arr = null;
System.out.println(arr[0]);
二维数组
本质上也是“类”,且二维数组中每个一维数组的长度可以不相同。
二维数组的定义与初始化
//数组静态初始化
int[][] matrix1 = {{1,2},{3,4},{5,6}};
//数组动态初始化
int[][] matrix2 = new int[2][3];
//二维数组遍历
for(int i = 0; i < matrix1.length; i++){
for(int j = 0; j < matrix1[i].length; j++){
System.out.println(matrix1[i][j]);
}
}
数组克隆时一定要注意浅克隆问题哦