在例外层次结构中,后代
RuntimeException
和Error
的那些是运行时异常/错误。
两者之间的区别是:RuntimeException
以下的人
由编程/设计不良引起的,以及Error
的那些
那些不能/不应该被开发者控制的。
为了在应用程序中编写异常,
例如,当业务逻辑中发生某些事情时抛出异常,
RuntimeException
已延长。
问题是,扩展之间究竟有什么区别
RuntimeException
并延长Error
- 除了延伸
Error
是不好的做法?
答案 0 :(得分:19)
Error
和RuntimeException
都是未经检查的异常,这意味着它表明程序存在缺陷,通常不应该被捕获。 (NullPointerException
,IndexOutOfBoundsException
等。)
我认为两者之间的主要区别在于RuntimeException
表示程序存在错误,而Error
是致命的但不受程序控制的影响。 (OutOfMemorryError
,ThreadDeath
等。)
因此继承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
...
}
作为一个捕获所有案例,因为Exception
是RuntimeException
的超类型。但你几乎从未见过(我从未见过它)
try {
...
} catch (Error e) {
...
}