这不是一个问题,而是它们如何在内部实施。编译器如何区分已检查的异常(例如,直接从Exception派生,但RuntimeException除外)和未检查的异常(例如从RuntimeException派生)。异常类定义中是否有一些特殊的标志,它们说明必须在try / catch块中放置哪些异常,或者Java编译器中是否有一些特定的规则(例如Java语言设计明确指定了是否检查了异常的类型)?< / p>
答案 0 :(得分:2)
这是由 Java编译器强制执行的,并且在运行时时进行了双重检查:如果Throwable
扩展RuntimeException
或{{1那么它被认为是未经检查的;所有其他人都经过检查。
在运行时,也会强制执行此检查(请记住,理论上您可以在运行时“构建”Java类。)
答案 1 :(得分:0)
所有未经检查的例外都是来自班级RuntimeException
或班级Error
的后续广告。所有其他人都被检查。
例如,使用反射,您始终可以检测此特定类当前异常的哪个类是超类。这与Java编译器检测其类型的方式相同。