Java异常
What:为什么抛出
Where:异常堆栈在哪抛出
Why:为什么抛出
Java的异常体系
从概念角度解析Java的异常处理机制
Error:程序无法处理的系统异常,编译器不做检查
Exception:程序可以处理,捕获后程序可以恢复正常
RuntimeException:不可预知,程序应当自行避免
非RuntimeException:可预知,从编译器校验的异常
RuntimeException
1.NullPointerException - 空指针引用异常
2.ClassCastException - 类型强制转换异常
3.IllegalArgumentException - 传递非法参数异常
4.IndexOutOfBoundsException - 下标越界异常
5.NumberFormatException - 数字格式异常
非RuntimeException
1.ClassNotFoundException - 找不到指定class异常
2.IOException - IO操作异常
Error
1.NoClassDefFoundError - 找不到class定义的异常
- 类依赖的class或者jar不存在
- 类文件存在,但是存在不同的域中
- 大小写问题,javac编译的时候是无视大小写的,很有可能编译出来的class文件就与想要的不一样
2.StackOverflowError - 深递归导致栈被耗尽而抛出的异常
3.OutOfMemoryError - 内存溢出异常
Java异常处理机制
抛出异常:创建异常对象,交由运行时系统处理
捕获异常:寻找合适的异常处理器处理异常,否则终止运行
高效主流的异常处理框架 - spring封装
1、try-catch块影响JVM的优化
2、异常对象实例需要保存栈快照等信息,开销较大