Checked exception及Unchecked exception对比

一、异常分类

        从异常处理机制的角度可以分为两类,Unchecked Exceptions和Checked Exceptions。Check即编译器检查程序是否已经抛出或处理了可能的异常。Unchecked Exceptions指的是被程序员check的异常,Checked Exceptions指的是被编译器check的异常。

        Throwable下面有两个子类,分别为Error和Exception,其中所有的Error类和Exception类中的RuntimeException类都属于Unchecked异常,其余都属于Checked异常。

二、处理机制

        Checked Exceptions可能会发生的地方,编译器会强制要求你要么处理这个异常(try catch块进行处理),要么在这个方法的头部声明这个方法可能会抛出一个异常,对调用这个方法的方法做一个警告,要求调用者来处理这个异常(throws声明)。

        Unchecked Exceptions可能会发生的地方,编译器无法预见,因此不要求做任何处理。

        一般来说,Checked Exceptions常常是可以捕获捕获并处理的,往往由与客户端的不正确调用引起,捕获异常并处理可以给用户提供一次改正的机会,提高程序的健壮性。例如:用户指定打开文件路径的文件并不存在,因此可以捕获这个异常,做一个提示,并让用户可以重新选择路径。Unchecked Exceptions一般捕获后没有什么价值的,其包含的Error属于系统的内部错误,是由于设备错误,物理限制,内存不足,JVM发生内部错误,不兼容等等原因导致的,因此捕获后没有什么处理价值。另一种RuntimeException则是由于程序员本身代码有错误,发生除零错误,空指针异常,数组越界等等,这种纯粹属于程序员写代码时的失误引起,需要改变程序,因此捕获的价值很低,重写代码找出bug即可。

Checked异常

        Checked异常是Exception类的子类中除去运行时异常的所有其他异常类,如IO异常,这类异常必须被捕获并进行处理否则编译就无法通过,异常被捕获之后需要进入异常处理,可以通过thorws、throw、try catch和finall来进行:

  • throws:声明本方法可能会发生xx异常;
  • throw:抛出xx异常;
  • try catch、 finally:捕获并处理异常。

Unchecked异常

        Unchecked异常包括运行时异常和Error,由于运行时异常和Error异常都是在编译阶段无法发现的,只有程序运行时才能发现的异常,所以编译器在编译时无法对其进行检查,这类异常是不需要在编译的时候用try catch、throws等机制来处理的,编译可以通过,执行时如果出现就直接导致程序失败;其中典型的运行时异常有空指针、数组访问越界等,通常是程序的逻辑错误引起的。

三、Checked exception、Unchecked exception二者对比

Checked exceptionUnchecked exception
基本区别必须被显示地捕获或者传递,否则编译无法通过异常可以不被捕获或抛出,编译器不检查
分类继承自Exception类,除了运行时异常其他的子类运行时异常及其子类,Error类
处理策略从异常发生的现场获取详细的信息,
利用 异常返回的信息来明确操作失
败的原因, 并加以合理的恢复处理
简单打印异常信息,无法再继续处理
表示代码看起来较复杂简单清晰
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值