Java的checked Exception 和 unchecked Exception

先看基本的异常结构层次图:

在这里插入图片描述

首先用网络上的说法总结一下:Error 和Runtime Exception 都属于 unchecked exception。除了RuntimeException之外的,都是 checked exception。

在这里插入图片描述

关于checked Exception 和 unchecked Exception的解析,网上五花八门,但是本人比较笨,看上去都很难理解,所以我想要的就是最通俗易懂地用自己的话来总结出来。
先从字面上简单理解,checked exception 直译就是 “已经被确认的异常”,unchecked exception 直译就是 “无法被确认的异常 ”。
在编码中, checked exception 一定要加 try … catch … 或者 throw 抛出具体异常 或者 throws声明可能抛出的异常。例如:ClassNotFoundException 找不到class,IllegalAccessException非法连接,SQLException 数据库操作异常,TimeoutException超时异常。这些异常,不做处理,编译都无法通过。

在这里插入图片描述

其实我们都知道它不一定会出现,但是为什么它们这种异常在我们写代码的时候就会被识别出来要捕获?因为“很有可能发生”,就例如从二楼往下跳,很有可能会摔断腿,但是不一定摔断腿,所以这个时候医生在旁边随时准备捕获和抢救,就能保证应用程序的稳定运行。

unchecked exception 包含了error 和 runtime exception , 意思是编译期间“无法被确认的异常”,例如OOM,那是编译期根本不可能捕抓并且被处理的,大佬,这可是JVM内存的问题,通过代码根本解决不了,又例如ArithmeticException,循环中访问数组下标越界 IndexOutOfBoundsException,这些是可以通过编译器的运行时代码才发生的错误,本来就该是程序员自己去避免的。

在这里插入图片描述

根据上面直白的解释,被确认和无法被确认,其实都是针对编译期间能否被确认捕获,至于为什么要区分这两种异常,其实就是为了减少Exception的出现,对于一些编译期间就能捕获处理的可能出现的异常,就强制要求处理,不放任到运行时抛出,有利于代码的健壮性,一定程度上保证应用程序进程的平稳运行。

猜你喜欢

转载自blog.csdn.net/whiteBearClimb/article/details/109284256