为什么Java中存在已检查和未检查的异常

时间:2012-12-10 08:57:16

标签: java exception

  

可能重复:
  Java: checked vs unchecked exception explanation
  Why are exceptions named checked and unchecked?

为什么Java中的两个异常类型名为“checked”和“unchecked”?选择此类例外的原因是什么?

2 个答案:

答案 0 :(得分:3)

已检查的异常扩展java.lang.Exception,而未经检查的异常扩展为java.lang.RuntimeExceptionjava.lang.Error

Exception扩展java.lang.ThrowableRuntimeException扩展Exception,而Error扩展Exception,扩展java.lang.Throwable。< / p>

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

  • Exception S是应用程序想要处理的情况。
  • RuntimeException S是您(通常)由于编程错误而无法处理的情况。您不应该抓住RuntimeException S,它们应该在您的单元测试中成为目标,并在您的生产代码中修复。
  • Error S是由于严重错误而无法处理的情况,例如系统问题(例如文件系统失败)。你不应该抛出,捕获或子类化Error,除非你正在为JVM构建诸如编译器之类的东西。

答案 1 :(得分:2)

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

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