Exception和Error有什么区别

问题:请对比 Exception 和 Error,另外,运行时异常与一般异常有什么区别?

《极客时间-Java核心技术面试精讲》

  • Exception 和 Error 都是继承了 Throwable 类,在 Java 中只有 Throwable 类型的实例才可以被抛出(throw)或者捕获(catch),它是异常处理机制的基本组成类型。

  • Exception 和 Error 体现了 Java 平台设计者对不同异常情况的分类。Exception 是程序正常运行过程中,可以预料的意外情况,可能并且应该被捕获,进行相应处理。

  • Error 是指正常情况下,不大可能出现的情况,绝大部分的 Error 都会导致程序(比如 JVM 自身)处于非正常、不可恢复的状态。既然是非正常情况,所以不便于也不需要捕获,常见的比如 OutOfMemoryError 之类,都是 Error 的子类。

  • Exception 又分为可检查(checked)异常和非检查(unchecked)异常,可检查异常在源代码里必须显式地进行捕获处理,这是编译期检查的一部分。前面我介绍的不可查的 Error,是 Throwable 而不是 Exception。

  • 不检查异常就是所谓的运行时异常,类似 NullPointerException、ArrayIndexOutOfBoundsException 之类,通常是可以编码避免的逻辑错误,和我说根据需要来判断是否需要捕获,并不会在编译期强制要求。


以下为个人模拟面试时的回答,谨供参考。

  • Exception 和 Error 都是 Throwable 的子类,都可以被 catch

  • Exception 是程序设计者可以预料的异常,且不会对 JVM 造成严重破坏,需要对其 catch 并进行处理

    • Java API 文档:The class Exception and its subclasses are a form of Throwable that indicates conditions that a reasonable application might want to catch.

  • Error 通常是非常严重的,难以恢复的错误,如 OutOfMemoryError,不应该去 catch 它

    • Java API 文档:An Error is a subclass of Throwable that indicates serious problems that a reasonable application should not try to catch.

Exception 分两大类

  1. 受检查异常(checked exception),除 RuntimeException 及其子类外的其它 Exception 都是受检查异常,如 IOException,必须在方法处声明抛出,在编译期可查
  2. 非检查异常(unchecked exception),RuntimeException 及其子类,不需要在方法处声明抛出,如 NullPointerException,可根据实际情况判断是否 catch 处理

不恰当的异常处理

  1. 全部 catch Exception 这类顶级异常,不针对特定异常做处理
  2. 生吞异常,导致程序可能出现奇怪的问题,且出错后排查困难

个人小站

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值