目录
(1)数组索引值越界异常:ArrayIndexOutOfBoundsException
一、数组概述
1. 数组的理解:数组(Array),是多个相同类型数据按一定顺序排列的集合,并使用一个名字命名 并通过编号的方式对这些数据进行统一管理。
2. 数组的相关概念:
>数组名
>元素
>索引、角标、下标 (0~length-1)
>长度
3. 数组的特点:
>数组是有序的序列
>数组属于引用数据类型,其元素也可以是基本数据类型
>创建数组对象会在内存中开辟一整块连续的空间,而数组名中引用的是
这块连续空间的首地址。
>数组的长度一旦确定,就不能修改。
4. 一维数组元素的默认初始化值:
> 数组元素是整型:0
> 数组元素是浮点型:0.0
> 数组元素是char型:0或'\u0000',而非'0'
> 数组元素是boolean型:false
> 数组元素是引用数据类型:null
5. 二维数组元素的默认初始化值
规定:二维数组分为外层数组的元素,内层数组的元素,如int[][] arr = new int[4][3];
外层元素:arr[0],arr[1]等
内层元素:arr[0][0],arr[1][2]等
数组元素的默认初始化值
>针对于初始化方式一:比如:int[][] arr = new int[4][3];
外层元素的初始化值为:地址值
内层元素的初始化值为:与一维数组初始化情况相同
>针对于初始化方式二:比如:int[][] arr = new int[4][];
外层元素的初始化值为:null
内层元素的初始化值为:不能调用,否则报错。
二、常见异常
(1)数组索引值越界异常:ArrayIndexOutOfBoundsException
a. 此情况测试代码如下:
package com.atguigu.java;
public class ArrayTest {
public static void main(String[] args) {
int[] arr = new int[]{1,2,3,4,5}; //声明与初始化,长度是5
arr[8] = 0; //,索引值越界,索引值是 0~4
for(int i = 0;i <= arr.length;i++){ //从0到5遍历,索引值越界
System.out.println(arr[i]);
}
}
}
b. 测试结果:
(2)空指针异常:NullPointerException
a.此情况测试代码如下:
package com.atguigu.java;
public class ArrayTest {
public static void main(String[] args) {
//情况1:
int[][] arr0 = new int[4][];
arr0[1][2] = 0;
//情况2:
String[] arrString = new String[4];
arrString = null;
System.out.println(arrString[0]);
//情况3:
String[] a = new String[]{"31","111","11"};
a[0] = null;
System.out.println(a[0].toString());
}
}
b.测试结果:
三、异常原因及处理解决
(1)ArrayIndexOutOfBoundsException :由概述可知,注意索引值的范围即可
(2)NullPointerException
内存解析如下:
int[][] arr = new int [4][3]; 堆和栈中存储过程如下
如果是代码2的情况1(其它的情况类似,画内存解析图即可理解),则如下
四、总结
数组的常见异常无非就这几种,总有一种适合你。多敲敲改改,画画内存解析图,不难理解。遇到这个bug就返回去数组所在处排查就可以了。(整理不易,点赞加关注呗。谢谢~~~)