异常体系
异常体系
Java异常
异常处理机制主要回答了三个问题
What:异常类型回答了什么被抛出
Where :异常堆栈跟踪回答了在哪抛出
Why:异常信息回答了为什么被抛出
- Error和Exception的区别
从概念角度解析Java的异常处理机制
Error:程序无法处理的系统错误,编译器不做检查
Exception:程序可以处理的异常,捕获后可能恢复
总结︰前者是程序无法处理的错误,后者是可以处理的异常
RuntimeException :不可预知的,程序应当自行避免
非RuntimeException :可预知的,从编译器校验的异常CheckedException
从责任角度看︰
1.Error属于JVM需要负担的责任;
2.RuntimeException是程序应该负担的责任;
3.CheckedException可检查异常是Java编译器应该负担的责任。
常见Error以及Exception
RuntimeException
1.NullPointerException -空指针引用异常
2.ClassCastException -类型强制转换异常
3.IllegalArgumentException -传递非法参数异常4.IndexOutOfBoundsException -下标越界异常
5.NumberFormatException -数字格式异常
非RuntimeException
1.ClassNotFoundException -找不到指定class的异常
2.IOException - IO操作异常
Error
1.NoClassDefFoundError -找不到class定义的异常
NoClassDefFoundError的成因
1.类依赖的class或者jar不存在
⒉.类文件存在,但是存在不同的域中
3.大小写问题,javac编译的时候是无视大小写的,很有可能编译出来的class文件就与想要的不一样
2.StackOverflowError-深递归导致栈被耗尽而抛出的异常3.OutOfMemoryError -内存溢出异常
原则
具体明确∶抛出的异常应能通过异常类名和message准确说明异常的类型和产生异常的原因﹔
提早抛出∶应尽可能早的发现并抛出异常,便于精确定位问题﹔延迟捕获︰异常的捕获和处理应尽可能延迟,让掌握更多信息的作用域来处理异常。
自己设计异常
在用户看来,应用系统发生的所有异常都是应用系统内部的异常
设计一个通用的继承自RuntimeException的异常来统一处理
其余异常都统一转译为上述异常AppException
在catch之后,抛出上述异常的子类,并提供足以定位的信息
Java异常处理消耗性能的地方
- try-catch块影响JVM的优化
- 异常对象实例需要保存栈快照等信息,开销较大
- 点赞
- 收藏
- 关注作者
评论(0)