前言
Java有很多优秀的语言特性和处理机制,但很少有人会提到异常处理机制,但是异常处理机制是Java中非常重要的组成部分,它对于保证我们系统的健壮性,可维护性等方面是非常重要的。
本文是对孤尽T31项目中学习Java异常处理机制的笔记总结。
一、Java异常机制
1. 使用异常,日志为系统保驾护航
道路千万条,安全第一条,日志不规范,排查两行泪
异常应当描述导致当前异常发生的原因
根据异常栈应当能够快速定位到异常发生的位置
结合异常描述和异常栈应当能解决异常
2. C语言的“异常”烦恼
以上c语言的异常处理有什么问题呢?
代码可读性差,去掉注释的话,可读性就更差了
当返回值与异常值相近时,容易混淆;例如定义了异常码1,2,3等,但刚好正确返回值也有这些数据,就需要额外了解所有返回值,保证异常码跟返回值不重复
需要调用方来分析异常,增加多余的工作量;调用方同样也需要了解所有返回值代表的意思
3. Java异常处理流程
finally里发生的异常如何正确捕获和处理?
finally里发生了异常,没有捕获处理,也没有处理原异常,jvm会怎么处理2个异常呢?
4. Java异常处理机制
try代码块中抛出多种异常该怎么处理?
加多个catch捕获所有可能的异常进行处理,每种异常处理流程不一致时采用这种
分析多个异常是不是某一类子异常,并且后续处理办法是一致的,可以只抛出父类异常
5. Java异常体系
Error
一般跟java虚拟机有关,比较致命的错误,如系统崩溃,虚拟机出错误等,通常应用程序无法处理的,Error也是不可检查的
运行时异常
是RuntimeException类及其子类异常,例如空指针异常,数组越界异常,除0异常等等,这类异常是不可检查的(编译器无法预计你写的程序逻辑有没有错误),程序可选择捕获或不捕获处理,一般都是由于程序逻辑错误引起的,用户也可以自定义可预测的业务运行时异常
非运行时异常
是RuntimeException以外的异常,如IOExceptio