2

可能重复:
Java:已检查与未检查的异常解释
为什么将异常命名为已检查和未检查?

为什么Java中的两种异常类型分别命名为“checked”和“unchecked”?选择此类异常的原因是什么?

4

2 回答 2

3

已检查的异常会扩展java.lang.Exception,而未检查的异常会扩展java.lang.RuntimeException,或者java.lang.Error.

Exception延伸java.lang.Throwable,而RuntimeException延伸Exception,和Error,像Exception,延伸java.lang.Throwable

在决定是否应该使用已检查和未检查的异常时,请始终记住以下规则:

  • ExceptionS 是应用程序想要处理的情况。
  • RuntimeExceptionS 是您(通常)由于编程错误而无法处理的情况。您不应该捕获RuntimeExceptionS,它们应该在您的单元测试中作为目标,并在您的生产代码中修复。
  • ErrorS 是由于严重错误而无法处理的情况,例如系统问题(例如文件系统出现故障)。Error除非您正在为 JVM 构建诸如编译器之类的东西,否则您永远不应该抛出、捕获或子类化 an 。
于 2012-12-10T09:12:47.667 回答
2

RuntimeException及其子类,以及类Error及其子类都是未经检查的异常类编译器不会强制它们在 throws 子句中声明。Throwable属于层次结构的所有其他异常类都是检查异常。

未经检查的异常类在 java 中免于编译时检查,因为它们可以在程序中的许多点发生,并且很难或不可能从它们中恢复。它们还取决于程序员的逻辑。例如,OutOfMemory Exception当 JVM 无法为程序分配更多内存时抛出

于 2012-12-10T09:09:27.230 回答