Error和Exception的区别
从概念角度解析java的异常处理机制
- Error:程序无法处理的系统错误,编译器不做检测
- Exception:程序可以处理的异常,捕获后可能恢复
Java的异常体系
从责任角度看:
- Error属于JVM需要负担的责任
- RuntimeException是程序应该负担的责任
- CheckedException可检测异常是Java编译器应该承担的责任
Check Exception必须try catch或者抛出
抛出错误之后就结束程序运行
常见Error以及Exception
RuntimeException
- NullPointException - 空指针引用异常
- ClassCastException - 类型强制转换异常
- IllegalArgumentException - 传递非法参数异常
- IndexOutOfBoundsException - 下标越界异常
- NumberFormatException - 数字格式异常
非RuntimeException
- ClassNotFoundException - 找不到指定class的异常
- IOException - IO操作异常
Error
- NoClassDefFoundError - 找不到class定义的异常
- StackOverflowError - 深度递归导致栈被耗尽而抛出的异常
- OutOfMemoryError - 内存溢出异常
NoClassDefFoundError的成因
- 类依赖的class或者jar不存在
- 类文件存在,但是存在不同的域中
- 大小写问题,javac编译的时候是无视大小写的,很有可能编译出来的class文件就与想要的不一样
Java的异常处理机制
- 抛出异常:创建异常对象,交由运行时系统处理
- 捕获异常:寻找合适的异常处理器处理异常,否则终止运行
Java异常处理消耗性能的地方
- try-catch块影响JVM的优化
- 异常对象实例需要保存栈快照等信息,开销较大
转载自慕课网剑指Java面试-Offer直通车视频