RuntimeException&错误

时间:2013-12-09 01:40:26

标签: java runtime-error runtimeexception

在例外层次结构中,后代 RuntimeExceptionError的那些是运行时异常/错误。

两者之间的区别是:RuntimeException以下的人 由编程/设计不良引起的,以及Error的那些 那些不能/不应该被开发者控制的。

为了在应用程序中编写异常, 例如,当业务逻辑中发生某些事情时抛出异常, RuntimeException已延长。

问题是,扩展之间究竟有什么区别 RuntimeException并延长Error - 除了延伸 Error是不好的做法?

2 个答案:

答案 0 :(得分:19)

ErrorRuntimeException都是未经检查的异常,这意味着它表明程序存在缺陷,通常不应该被捕获。 (NullPointerExceptionIndexOutOfBoundsException等。)

我认为两者之间的主要区别在于RuntimeException表示程序存在错误,而Error是致命的但不受程序控制的影响。 (OutOfMemorryErrorThreadDeath等。)

因此继承Error是不好的做法,因为错误通常不是程序可以在运行时解决的。在你的程序中,如果你需要扔东西,请使用Exception

答案 1 :(得分:7)

  

问题是,扩展之间究竟有什么区别   RuntimeException和扩展Error--除了扩展Error是   不好的做法?

你已经提到了主要的区别。 The Java Language Specification says the same thing in different terms。对于Error,它声明

  

Error是普通的所有异常的超类   程序通常不会恢复

对于RuntimeException,它说明了

  

RuntimeException是Exception的直接子类。   RuntimeException是可能存在的所有异常的超类   在表达式评估过程中抛出了很多原因,但是从中可以看出   可能仍然可以恢复

你应该从这些引用中删除的是你通常会看到的

try {
   ...
} catch (Exception e) { // catches RuntimeException
   ...
}

作为一个捕获所有案例,因为ExceptionRuntimeException的超类型。但你几乎从未见过(我从未见过它)

try {
   ...
} catch (Error e) {
   ...
}