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

throw 与 throws 有什么区别?

先说出你的答案

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

查看完整题解

参考回答

直接回答

throw 是语句,用来在当前执行位置抛出一个异常对象;throws 写在方法或构造器声明上,说明它可能向调用方传播哪些异常。throw 会改变执行流程,throws 本身不创建异常,也不表示方法每次调用都一定抛异常。

讲清原理

可以把 throw 看成“这一次确实报告了问题”,把 throws 看成“接口提前说明这种风险”。受检异常如果没有在当前方法里处理,通常需要在签名中声明,让调用方继续处理或声明。

RuntimeException 及其子类不强制写 throws,但这并不意味着可以忽略接口文档。方法重写也有约束:不能随意增加父方法未允许的更宽泛受检异常,否则通过父类型调用时,调用方原有的处理方式就不够了。

例子与易错点

static void check(boolean missing) throws java.io.IOException {
    if (missing) {
        throw new java.io.IOException("文件不存在");
    }
}

missing 为 false 时正常完成。异常可以交给明确的上层边界处理,不必在每层 catch 后只打印一句话,再假装成功返回。

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

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

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