03_数组
三、数组
3.1 数组理解
- 数组属于 引用数据类型 的变量。数组的元素,既可以是 基本数据类型 ,也可以是 引用数据类型。
- 创建数组对象会在内存中开辟一整块连续的空间。
- 数组的长度一旦确定,就不能修改。
3.2 一维数组
3.2.1 数组初始化
1、静态初始化(数组的初始化和数组元素的赋值操作同时进行)
int[] ids;
ids = new int[]{1001,1002,1003,1004;
2、动态初始化(数组的初始化和数组元素的赋值操作分开进行)
String[] names = new String[5];
Java中数组角标从 0 开始,到 length-1 结束
3.2.2 数组元素的默认初始化值
int[] arr= new int[4];
for(int i=0;i< arr.length;i++){
System.out.println(arr[i]);
}
//输出:0 0 0 0
数组元素类型 | 初始化值 |
---|---|
基本数据类型 |
|
整型 | 0 |
浮点型 | 0.0 |
char型 | 0(数字) 而非 '0'(字符) |
boolean型 | false |
引用数据类型 | null(关键字) |
String | null |
3.2.3 数组内存结构
-
栈(stack):局部变量(方法里的变量)
-
堆(heap):new出来的结构(对象、数组)
3.3 多维数组
3.3.1 二维数组的初始化
//一维数组初始化
int[] arr = new int[] {1,2,3};
//二维数组——静态初始化
int[][] arr1 = new int[][]{{1,2,3},{4,5},{6,7,8}};
//二维数组——动态初始化1
String[][] arr2 = new String[3][2];
//二维数组——动态初始化2
String[][] arr3 = new String[3][];
//要么赋值,要么规定长度
//也是正确写法(类型推断)
int[] arr4[] = {{1,2},{3,4},{5,6,7}};
//数组长度
System.out.println(arr1.length);//3
System.out.println(arr1[1].length);//2
System.out.println(arr1[0][1]);//2
System.out.println(arr2[1][1]);//null
System.out.println(arr3[1][0]);//空指针异常
3.3.2 二维数组默认初始化值
int[][] arr = new int[4][3];
System.out.println(arr[0]);//[@16进制地址值
System.out.println(arr[0][0]);//0
System.out.println(arr);//[[@16进制地址值
针对初始化方式一:int[][] arr= new int[4][3];
外层元素初始化值:地址值
内层元素初始化值:与一位数组初始化值相同
针对初始化方式二:int[][] arr = new int[4][];
外层元素初始化值:null
内层元素初始化值:不能调用,否则报错(空指针异常)
3.4 数组Arrays工具类使用
方法 | 功能 | 底层实现 |
---|---|---|
boolean equals(int[]a , int[]b) | 判等 | 地址、非空、长度 |
String toString(int[] a) | 输出数组 | 遍历 |
void fill(int[] a , int val) | 替换 | 全部替换 |
void sort(int[] a) | 对数组排序 | 快排 |
int binarySearch(int[] a , int k) | 找值为key索引 | ≥0:找到 <0:未找到 |
3.5 数组常见异常
3.5.1 数组角标越界异常:ArrayIndexOutOfBoundsExcetion
int[] arr= new int[]{1,2,3,4,5};
for(int i=0;i<=arr.length;i++){
System.out.println(arr[i]);
}
System.out.println(arr[-2]);
3.5.2 空指针异常:NullPointerException
情况一:
int[] arr1 = new int[] {1,2,3};
arr1 = null;
System.out.println(arr1[0]);
情况二:
int[][] arr2 = new int[4][];//内层没有初始化
System.out.println(arr2[0][0]);
情况三:
String[] arr3 = new String[]{"AA","BB","CC"};
arr3[0] = null;
System.out.println(arr3[0].toString());