Java异常知识点总结
1. 异常处理机制主要回答了三个问题: What,Where,Why
-
What:异常类型回答了什么被抛出
-
Where:异常堆栈跟踪回答了在哪抛出
-
Why:异常信息回答了为什么被抛出
2. Java异常体系
- RuntimeException(运行时异常) : 不可预知的,程序应当自行避免;
- (非RuntimeException)编译时异常 : 可预知的且编译器会做检查;
3. 从概念角度解析Java的异常处理机制
-
Error : 程序无法处理的系统错误,编译器不做检查;
-
Exception : 程序可以处理的异常,捕获后可能会被修复;
- 总结 : 前者是程序无法处理的错误,后者是可以处理的异常;
4.从责任角度来看
5. 常见Error以及Exception
-
RuntimeException(运行时异常)
- NullPointerException-空指针引用异常
- ClassCastException-类型强制转换异常
- IllegalArgumentException-传递非法参数异常
- IndexOutOfBoundsException-下标越界异常
- NumberFormatException-数字格式异常
-
非RuntimeException(编译时异常)
- ClassNotFoundException-找不到指定class的异常
- IOException-IO操作异常
-
Error
- NoClassDefFoundError-找不到class定义的异常
- StackOverfloweError-深递归导致被耗尽而抛出的异常
- OutOfMemoryError-内存溢出异常
6. Java的异常处理机制
-
抛出异常:创建异常对象,交由运行时系统处理
-
捕获异常:寻找合适的异常处理器异常,否则终止运行
7. Java异常的处理原则
-
具体明确:抛出的异常应能通过异常类名和message准确说明异常的类型和产生异常的原因;
-
提早抛出:应尽可能早的发现并抛出异常,便于精确定位问题;
-
延迟捕获:异常的捕获和处理应尽可能延迟,让掌握更多信息的作用域来处理异常。
8. 高效主流的异常处理框架
在用户看来,应用系统发生的所有异常都是应用系统内部的异常
-
设计一个通用的继承自RuntimeException的异常来统一处理
-
其余异常都统一转译为上诉异常AppException
-
在Catch之后,抛出上述异常的子类,并提供足以定位的信息
-
由前端接受AppException做统一处理
9. try-catch的性能
- try-catch代码块会影响JVM的优化;
- 异常对象实例需要保存栈快照信息,开销比较大;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)