在异常层次结构中,RuntimeException和Error的后代是运行时异常/错误。
两者的不同之处在于:RuntimeException下的那些是编程/设计不善造成的,而Error的那些不能/不应该被开发人员控制。
例如,为了在应用程序中编写异常代码,以便在业务逻辑发生时抛出异常,RuntimeException将被扩展。
问题是,扩展RuntimeException和扩展Error到底有什么区别--除了扩展Error是一种糟糕的实践?
发布于 2013-12-09 01:51:30
Error和RuntimeException都是未经检查的异常,这意味着它表示程序存在缺陷,通常不应该被捕获。(NullPointerException,IndexOutOfBoundsException等)
我认为两者的主要区别在于,RuntimeException表明程序存在错误,而Error是致命的,但程序无法控制。(OutOfMemorryError,ThreadDeath等)
因此,Error 子类化是一种糟糕的做法,因为错误通常不是您的程序在运行时可以修复的东西。在您的程序中,如果需要抛出一些东西,请使用Exception。
发布于 2013-12-09 01:58:28
问题是,扩展RuntimeException和扩展错误到底有什么区别--除了扩展错误是错误的实践?
你已经提到了主要的区别。The Java Language Specification says the same thing in different terms。对于Error,它声明
Error是普通程序通常不会恢复的所有异常的超类。
对于RuntimeException,它声明
类
RuntimeException是异常的直接子类。RuntimeException是所有异常的超类,这些异常在表达式计算期间可能出于多种原因抛出,但恢复仍然可能是。
你应该从这些名言中删除的是,你通常会看到
try {
...
} catch (Exception e) { // catches RuntimeException
...
}因为Exception是RuntimeException的超级类型,所以所有的情况都是如此。但你几乎看不到(我从未见过)
try {
...
} catch (Error e) {
...
}https://stackoverflow.com/questions/20461688
复制相似问题