2019.11
Java的异常
从继承关系可知:Throwable是异常体系的根,它继承自Object。Throwable有两个体系:Error和Exception,Error表示严重的错误,程序对此一般无能为力,例如:
- OutOfMemoryError:内存耗尽
- NoClassDefFoundError:无法加载某个Class
- StackOverflowError:栈溢出
而Exception则是运行时的错误,它可以被捕获并处理。
某些异常是应用程序逻辑处理的一部分,应该捕获并处理。例如: - NumberFormatException:数值类型的格式错误
- FileNotFoundException:未找到文件
- SocketException:读取网络失败
还有一些异常是程序逻辑编写不对造成的,应该修复程序本身。例如: - NullPointerException:对某个null的对象调用方法或字段
- IndexOutOfBoundsException:数组索引越界
Exception又分为两大类:
- RuntimeException以及它的子类;
- 非RuntimeException(包括IOException、ReflectiveOperationException等等)
Java规定:
- 必须捕获的异常,包括Exception及其子类,但不包括RuntimeException及其子类,这种类型的异常称为Checked Exception。
- 不需要捕获的异常,包括Error及其子类,RuntimeException及其子类。
throw Eg. Throw new IOException(); Throw 抛出的只能够是可抛出类throwable 或者其子类的实例对象
Throw 抛出对象的两种处理方案 1.通过try..catch — 自己抛出自己处理 2.throw 抛出的对象,在方法声明处抛出异常类型—谁用谁处理,调用者可以自己处理,也可以继续上抛
第一点eg.
Eg.2
异常分类
异常的五个关键字 Try, catch, finally, throw, throws
Try catch finally
Try 产生异常,catch 捕获异常,finally 无论怎样都能显示
-> Java 异常链
相关API:
可以把多层异常 一起打印展示出来
->总结
Try catch finally
Case 1: 如果try内正常执行的话,直接跳转到catch后面
Case 2: 如果try内不正常的话,且异常和 catch里的相匹配,那么进入catch里,
Case 3: 如果try 不正常执行,且异常与catch语句块内无法匹配,程序中断执行
Finally: 无论是否执行catch语句块,都将会执行finally
Try-catch-finally
0 赞 Like