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