You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

关于Java Checked Exception发生时机的困惑求解及官方文档参考

关于Java受检异常的编译时与运行时说明

核心结论

所有异常(包括受检和非受检)的实际发生(抛出)都在运行时,但受检异常会被Java编译器在编译阶段强制检查处理规则。

Java 8官方文档依据(来自Java语言规范JLS)

受检异常指的是除RuntimeException及其子类、Error及其子类之外的Throwable子类。编译器会强制要求代码必须对这类异常做出处理:要么通过try-catch块捕获并处理,要么在方法签名中使用throws声明将异常向上抛出。如果未按此规则处理,编译会直接失败。
而异常实例的创建、抛出动作,本质是代码执行的结果,只有在程序运行时才会触发——编译阶段仅做语法和规则检查,不会执行任何业务逻辑,因此不可能产生实际的异常。

举例说明

比如java.io.IOException是典型的受检异常:

  • 编译时:如果代码中调用了可能抛出IOException的方法(如new FileInputStream("file.txt"))却未处理该异常,编译器会直接报错,这就是编译阶段的检查行为。
  • 运行时:只有当程序实际执行到该代码,且确实出现文件不存在等IO错误时,才会实际抛出IOException实例,这是运行时的异常发生行为。

内容的提问来源于stack exchange,提问作者Vattamwar Prathamesh Pravin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 14:10:25