Java异常体系
image.png
从概念角度看Error和Exception的区别
- Error:程序无法处理的系统错误,一般指与JVM相关的问题,如系统崩溃,虚拟机错误,内存空间不足,方法站调用溢出等(OutOfMemoryError),对于这类错误,一般编译器不做检查,建议先终止程序
- Exception:程序可以处理的异常
Exception:
- RuntimeException:如数组下标越界,访问空指针等,不可预知,程序编写时避免
- 非RuntimeException:必须进行处理的异常,不处理程序没法通过,如IOException
从责任角度
1.Error属于JVM需要负担的责任;
2.RuntimeException是程序应该负担的责任;
3.Checked Exception可检查异常是Java编译器应该负担的责任。
image.png
Java的异常处理机制
- 抛出异常:方法创建异常对象,并交由运行时系统处理,异常对象中包含了异常信息,运行时系统负责寻找处理异常的代码并执行
- 捕获异常:抛出异常后,系统开始寻找合适的异常处理器处理异常,当异常处理器所能处理的异常和抛出的异常相符时,即为合适的异常处理器,系统从发生异常的方法开始,依次回查栈中的方法,直至找到含有异常处理器的方法并执行,若没找到则终止运行
Java异常处理消耗性能的地方
- try-catch块影响JVM的优化
- 异常对象实例需要保存栈快照等信息,开销较大