Java的checked exception与unchecked exception

在Java中exception分为checked exception和unchecked异常,两者有什么区别呢?

从表象来看,

  • checked异常就是需要在代码中try ... catch ...的异常,编译器在编译代码时会进行校验,如果没有对这些异常进行捕捉,就会编译出错。(本人理解:checked异常就是可以预料到会出现异常,为了防止真的出现异常,代码中必须显式地捕捉checked异常)。

  • unchecked异常就是该类异常不是一定会出现的异常,可能是由于代码写的有问题(例如,数组下标越界),运行环境异常(例如,内存不足)。(本人理解:unchecked异常就是没法预先判定的异常,因为异常是由于代码的编写错误或者运行环境的问题,编译器无从知晓这些异常)。

前人总结了一张简化Java中异常类的层次结构:

  • 派生于Error或RuntimeException的异常称为unchecked异常
  • 剩下的异常就是checked异常(注意,上图中就剩下IO异常,其实是不准确的)

国外有人总结了一张更为全面的异常层次结构图:

参考资料:

详解Java中的checked异常和unchecked异常
Diagram of Exception Hierarchy

原文地址:https://www.cnblogs.com/acode/p/7209862.html