异常处理流程
程序员文章站
2024-03-24 08:54:40
...
异常类结构
来观察两个异常类的继承关系
Ø 可以发现所有的异常类型最高的继承类是Throwable,并且通过doc文档可以发现在Throwable下有两个子类:
Ø Error:指的是JVM错误,这个时候的程序并没有执行,无法处理;
Ø Exception:指的是程序运行中产生的异常,用户可以使用异常处理格式处理。
异常的处理完整流程
当程序在运行的过程之中出现了异常后,那么会由JVM自动根据异常的类型实例化一个与之类型匹配的异常类对象(此处用户不用去关心如何实例化对象,由JVM负责处理);
产生了异常对象之后会判断当前的语句上是否存在有异常处理,如果现在没有异常处理,那么就交给JVM进行默认的异常处理,处理的方式:输出异常信息,而后结束程序的调用;
如果此时存在有异常的捕获操作,那么会由try语句来捕获产生的异常类实例化对象,而后与try语句后的每一个catch进行比较,如果现在有符合的捕获类型,则使用当前catch的语句来进行异常的处理,如果不匹配,则向下继续匹配其它的catch;
不管最后异常处理是否能够匹配,那么都要向后执行,如果此时程序中存在有finally语句,那么就先执行finally中的代码。但是执行完finally语句后需要根据之前的catch匹配结果来决定如何执行,如果之前已经成功的捕获了异常,那么就继续执行finally之后的代码,如果之前没有成功的捕获异常,那么就将此异常交给JVM进行默认处理(输出异常信息,而后结束程序执行)
使用Exception处理异常
public class TestDemo {
public static void main(String args[]) {
System.out.println("1、除法计算开始。");
try {
int x = Integer.parseInt(args[0]); // 接收参数并且转型
int y = Integer.parseInt(args[1]); // 接收参数并且转型
System.out.println("2、除法计算:" + (x / y));// 此处产生异常
// 异常产生之后的语句将不再执行,此处在try中产生异常,所以下面的输出不会执行
System.out.println("ww");
} catch (Exception e) { // 处理所有异常类型
e.printStackTrace();
} finally {
System.out.println("### 不管是否出现异常我都执行!") ;
}
System.out.println("3、除法计算结束。");
}
}