在Java中exception分为checked exception和unchecked异常,两者有什么区别呢?
从表象来看,
checked异常就是需要在代码中try ... catch ...的异常,编译器在编译代码时会进行校验,如果没有对这些异常进行捕捉,就会编译出错。(本人理解:checked异常就是可以预料到会出现异常,为了防止真的出现异常,代码中必须显式地捕捉checked异常)。
unchecked异常就是该类异常不是一定会出现的异常,可能是由于代码写的有问题(例如,数组下标越界),运行环境异常(例如,内存不足)。(本人理解:unchecked异常就是没法预先判定的异常,因为异常是由于代码的编写错误或者运行环境的问题,编译器无从知晓这些异常)。
前人总结了一张简化Java中异常类的层次结构:
- 派生于Error或RuntimeException的异常称为unchecked异常
- 剩下的异常就是checked异常(注意,上图中就剩下IO异常,其实是不准确的)
国外有人总结了一张更为全面的异常层次结构图:
参考资料: