Java 后端面试题库 / 全部题解免费阅读理解原理,有条理地回答

Exception 和 Error 有什么区别?

先说出你的答案

定义边界、关键机制、一个反例;P8题再补容量、失败与验证。

查看完整题解

参考回答

直接回答

Exception 和 Error 都继承 Throwable。Exception 主要表示程序可能需要处理的异常;Error 通常表示运行环境或虚拟机遇到严重问题。是否必须捕获,不能只看“是不是 Exception”:RuntimeException 及其子类,以及 Error 及其子类,都属于非受检异常。

讲清原理

可以把 Throwable 理解为“能够被抛出的问题”。其中,受检异常要求调用方捕获或在方法签名中声明,例如 IOException;编译器希望你提前想好读文件失败时怎么处理。RuntimeException 常见于空指针、参数不合法等问题,编译器不强制处理。

Error 也能被 catch 捕获,但“能捕获”不等于“捕获后能安全继续”。例如内存不足时,打印日志都可能再次申请内存。处理策略取决于具体故障及恢复条件,而不是简单地把所有 Error 吞掉。

异常体系:继承关系决定异常类别
异常体系:继承关系决定异常类别

例子与易错点

NullPointerException 是 RuntimeException;IOException 是受检异常;OutOfMemoryError 是 Error。

不要为了让程序看似正常而写 catch (Throwable t) {}。通常应处理自己能恢复的问题,把不能恢复的问题交给明确的故障边界。

相关题:第 50 题、第 60 题。

这道题,你掌握得怎么样?

掌握程度由你主动标记,阅读和收藏不会自动改变状态。