异常的作用
- 异常应当描述导致当前异常发生的原因
- 根据异常栈快速定位到异常发生的位置
- 结合异常描述和异常栈解决异常
异常的处理流程图
try代码块中可能会抛出多种异常,该怎么捕获?
如果多种异常共有一个父类,并且处理它们的方式是一致的,那么我们可以catch这个父类并进行处理;如果多种异常的处理方式并不相同,那么先catch子类异常,然后逐步升级,最后catch级别最高的父类异常,并在每个catch中定义相应的处理逻辑。
Throwable的抓取规约
【强制】在调用RPC、二方包、或动态生成类的相关方法时,捕捉异常必须使用Throwable类来进行拦截。
根据《阿里巴巴Java开发手册》,通过反射机制来调用方法,如果找不到方法,抛出NoSuchMethodException。什么情况会抛出NoSuchMethodError呢?二方包在类冲突时,仲裁机制可能导致引入非预期的版本使类的方法签名不匹配,或者在字节码修改框架(比如:ASM)动态创建或修改类时,修改了相应的方法签名。这些情况,即使代码编译期是正确的,但在代码运行期时,会抛出NoSuchMethodError。
下面这篇文章解释了Maven的仲裁机制如何会引入错的jar包&