首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >RuntimeException &误差

RuntimeException &误差
EN

Stack Overflow用户
提问于 2013-12-09 01:40:25
回答 2查看 25.3K关注 0票数 26

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

两者的不同之处在于:RuntimeException下的那些是编程/设计不善造成的,而Error的那些不能/不应该被开发人员控制。

例如,为了在应用程序中编写异常代码,以便在业务逻辑发生时抛出异常,RuntimeException将被扩展。

问题是,扩展RuntimeException和扩展Error到底有什么区别--除了扩展Error是一种糟糕的实践?

EN

回答 2

Stack Overflow用户

发布于 2013-12-09 01:51:30

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

我认为两者的主要区别在于,RuntimeException表明程序存在错误,而Error是致命的,但程序无法控制。(OutOfMemorryErrorThreadDeath等)

因此,Error 子类化是一种糟糕的做法,因为错误通常不是您的程序在运行时可以修复的东西。在您的程序中,如果需要抛出一些东西,请使用Exception

票数 26
EN

Stack Overflow用户

发布于 2013-12-09 01:58:28

问题是,扩展RuntimeException和扩展错误到底有什么区别--除了扩展错误是错误的实践?

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

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

对于RuntimeException,它声明

RuntimeException是异常的直接子类。RuntimeException是所有异常的超类,这些异常在表达式计算期间可能出于多种原因抛出,但恢复仍然可能是

你应该从这些名言中删除的是,你通常会看到

代码语言:javascript
复制
try {
   ...
} catch (Exception e) { // catches RuntimeException
   ...
}

因为ExceptionRuntimeException的超级类型,所以所有的情况都是如此。但你几乎看不到(我从未见过)

代码语言:javascript
复制
try {
   ...
} catch (Error e) {
   ...
}
票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20461688

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档