Java第八天异常
1.1 数组工具类
封装:将重复代码写到函数中,需要使用的时候 通过函数调用形式让代码执行。
面向对象思想始于封装。
两种情况:1 类的封装[数据模型类封装 其他类封装 ] 2 工具类封装 [数据工具类封装 ArrayTool]
你能封装一个工具类 其他人也能,官方就封装了一个 Arrays
Arrays.equals() 判断俩数组是否完全一样
Arrays.sort() 数组排序
Arrays.toString() 将数组转换成格式化字符串
Arrays.copyOf() 克隆数组
Arrays.copyOfRange() 提取范围 前闭后开
Arrays.binarySearch() 查找出现的索引 没找到返回-1
1.2 为什么需要异常
我们写过一个函数 getMax() 有问题
public class ArrayTool {
public static int getMax(int[] arr){
int max = arr[0];
for(int i=1;i<arr.length;i++){
if(arr[i]>max){
max = arr[i];
}
}
return max;
}
}
当一个数组里面一个数据都没有的时候 就没有最大值一说了。
@Test
public void test(){
int[] arr = {};
int a = ArrayTool.getMax(arr);
System.out.println(a);
}
所以我们今后的代码 70%都是安全判断 30%代码是业务流程 所以我们获取最大值的函数也应该是 先判断是否能获取最大值
public static int getMax(int[] arr){
if(arr.length == 0){
return -1;
}
int max = arr[0];
for(int i=1;i<arr.length;i++){
if(arr[i]>max){
max = arr[i];
}
}
return max;
}
但是我们加了判断之后 发现了一个可怕的问题 条件成立该返回什么呢?
发现返回什么都不好使 返回0 -1 本身就有歧义 返回其他的类型又不匹配 所以说return什么都不行
所以java就造了一套新的返回形式 异常返回
我们以前说 有返回值的函数 一定要有一个可以执行的 return ,但是从今天开始 这句话就不要再说了 因为java对于返回值 有两种形式
return 返回
throw 返回
1.3throw解决问题
public class ArrayTool {
public static int getMax(int[] arr){
if(arr.length == 0){
throw new RuntimeException("?????? 数组为空");
}
int max = arr[0];
for(int i=1;i<arr.length;i++){
if(arr[i]>max){
max = arr[i];
}
}
return max;
}
}
什么时候return 什么时候throw?
如果调用者传递的数据没有问题
我们函数执行方能根据参数正常执行 那就正常return返回
如果传递过来的数据有问题 导致无法正常执行 则 异常throw返回
public void test(){
String str = "hello world";
char a = str.charAt(-50);
System.out.println(a);
}
public char charAt(int index) {
if ((index < 0) || (index >= value.length)) {
throw new StringIndexOutOfBoundsException(index);
}
return value[index];
}
1.4 执行方抛出异常语法
throw 异常对象
1.5 异常的分类
![]()
Throwable 可抛出的
Error :错误,指的是程序内部出现问题,无法通过代码解决的 例如 OutOfMemoryError 内存超出错误,简单的说 就是内存不够了
[说是代码无法解决 还是你代码的问题 例如 死循环]
Exception:异常,程序传递数据的时候导致无法正常执行代码,通过异常表示。
运行时异常 RuntimeException 和其子类 :程序运行起来之后才会出现的异常 例如:
非运行时异常 RuntimeException分支以外的都称之为非运行时异常:代码写完就会出现 必须要解决 不解决无法执行
例如 Class.forName("123123123");
我们需要记住分类的情况 还要记住常用的异常.
序号 异常名称 异常描述
1 java.lang.ArrayIndexOutOfBoundsException 数组索引越界异常。当对数组的索引值为负数或大于等于数组大小时抛出。
2 java.lang.ArithmeticException 算术条件异常。譬如:整数除零等。
3 java.lang.SecurityException 安全性异常
4 java.lang.IllegalArgumentException 非法参数异常
5 java.lang.ArrayStoreException 数组中包含不兼容的值抛出的异常
6 java.lang.NegativeArraySizeException 数组长度为负异常
7 java.lang.NullPointerException 空指针异常。当应用试图在要求使用对象的地方使用了null时,抛出该异常。譬如:调用null对象的实例方法、访问null对象的属性、计算null对象的长度、使用throw语句抛出null等等。
序号 异常名称 异常描述
1 IOException 操作输入流和输出流时可能出现的异常
2 EOFException 文件已结束异常
3 FileNotFoundException 文件未找到异常
序号 异常名称 异常描述
1 ClassCastException 类型转换异常类
2 ArrayStoreException 数组中包含不兼容的值抛出的异常
3 SQLException 操作数据库异常类
4 NoSuchFieldException 字段未找到异常
5 NoSuchMethodException 方法未找到抛出的异常
6 NumberFormatException 字符串转换为数字抛出的异常
7 StringIndexOutOfBoundsException 字符串索引超出范围抛出的异常
8 IllegalAccessException 不允许访问某类异常
9