简述
此文是对 第2讲 | Exception和Error有什么区别? 的学习
一些知识点/笔记点:
- Exception 和 Error 都是继承了 Throwable 类
- Exception 是程序正常运行中,可以预料的意外情况,可能并且应该被捕获,进行相应处理。
- Error 是指在正常情况下,不大可能出现的情况;
- Exception 又分为可检查(checked)异常和不检查(unchecked)异常
- 可检查异常在源代码里必须显式地进行捕获处理,这是编译期检查的一部分
- 不检查异常就是所谓的运行时异常,类似 NullPointerException、ArrayIndexOutOfBoundsException 之类
- 经典题目: NoClassDefFoundError 和 ClassNotFoundException 有什么区别?
- 异常处理的两个基本原则:
1.尽量不要捕获类似 Exception 这样的通用异常,而是应该捕获特定异常
2.不要生吞(swallow)异常 - 实际使用中不要使用e.printStackTrace();最好使用产品日志,详细地输出到日志系统里
- Throw early, catch late 原则。
- 根据需要自定义异常
- Java 的异常处理机制存在的问题:
1.try-catch 代码段会产生额外的性能开销
2.Java 每实例化一个 Exception,会有快照,相对比较重的消耗