Mic*_*ord 6 java unchecked-exception
是否可以通过查看代码来判断异常类是经过检查还是未经检查?我一直认为,如果它扩展了Exception,则会进行检查,但是RuntimeException会扩展Exception并且取消选中.RuntimeException可能是弯曲该经验法则的唯一类,其他未经检查的异常如果不扩展RuntimeException则必须扩展Throwable.但是,我没有看到RuntimeException与Exception的区别.我想知道是否在解释器本身内部定义了差异?
是否可以仅通过查看代码来判断异常类是已检查还是未检查?
是的。如果您知道 JLS ( 11.1.1 )中指定的规则...并且您还可以查看异常的超类的代码(以便您可以检查层次结构)。
规则是“检查”例外情况,但以下情况除外:
RuntimeException及其子类,以及
Error及其子类,
这是“未经检查的”。
我想知道差异是否是在解释器本身内部定义的?
不,它包含在 Java 语言规范中。事实上,JVM 对检查异常和非检查异常的处理方式是一样的。所有检查异常是否被正确处理的检查都是由 Java 编译器完成的。
但是,我仍然不明白 RuntimeException 扩展 Exception 而不是 Throwable 的推理。鉴于 RuntimeException 中没有任何内容可以覆盖 Exception 中定义的行为,这种设计选择似乎是矛盾的。
事情就是这样。此外,我没有看到任何逻辑矛盾。
AnError代表不可恢复的状况。它是未经检查的,因为没有必要强制应用程序对此执行某些操作。
AnException代表潜在可恢复的状况。
ARuntimeException表示我们不想强制应用程序处理的潜在可恢复情况。(但如果它愿意的话,它可以)。
显然,根据这种分类法,a RuntimeException>>is<< anException且 >>not<< an Error...,这就是以这种方式定义异常类层次结构的基本原理。
| 归档时间: |
|
| 查看次数: |
424 次 |
| 最近记录: |