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 题。
和评分标准对照,你能独立回答到哪一步?
自评会安排下一次复习,不保存你的口述内容。
这道题,你掌握得怎么样?
掌握程度由你主动标记,阅读和收藏不会自动改变状态。