2023/3/1 异常
![请添加图片描述](https://i-blog.csdnimg.cn/blog_migrate/b5c1cfd890db02c688a6935bf5e272c0.png)
一、异常的分类
1、编译时异常
也就是上图中的其他异常,直接继承Exception,在编译的时候就会提示的异常,比如日期解析异常
2、运行时异常
在运行的时候才会提示的异常
二、异常的处理
1、JVM自动处理
在控制台直接输出异常信息,并且不会执行异常发生之后的代码
2、try——catch处理
① 如果try结构中没有出现异常,执行try中的内容和try——catch结构之后的代码
② 如果try结构中出现了异常,跳到catch结构中,执行catch该异常中的代码,再执行try——catch结构之后的代码
③ 如果try结构中出现了异常,跳到catch结构中,但是catch中没能成功捕获对应的异常,那么为JVM默认处理方式
④ 如果捕获的异常有父子关系,那么父类的异常必须在代码的下面,否则会出错
⑤ JDK7之后,可以在一个catch中同时捕获多个异常,进行相同的处理,避免代码重复
public class A01_Test {
public static void main(String[] args) {
int[] arr = {1, 2, 3, 4, 5};
try {
System.out.println(arr[10]);
System.out.println(2 / 0);
}catch (ArrayIndexOutOfBoundsException | ArithmeticException e) {
System.out.println("出现异常");
}
}
}
三、异常中的常见方法
printStackTrace() 把异常的信息输出在控制台
四、抛出异常
1、throws 写在方法定义处,用于声明一个异常,告诉调用者本方法可能出现的异常
其中:编译异常必须声明,运行异常可以省略
2、throw 写在方法体中,用于结束方法,手动抛出异常,并且方法中下面的代码不再运行
五、自定义异常
目的是使报错的信息更加见名知意
1、定义异常类
2、写继承关系
3、写空参构造和有参构造