Java中未检查的异常:从错误继承还是从RuntimeException继承?

Java中未检查的异常:从错误继承还是从RuntimeException继承?,java,exception-handling,Java,Exception Handling,我想处理带有(未检查的)异常的错误。我听说,对于每种异常,我都应该创建Error或RuntimeException的子类。 区别是什么?应该识别编程上不可恢复的问题(例如内存不足)。应确定由代码无法控制的意外情况(例如数据库关闭)引起的程序可恢复问题。应该识别由代码流中的错误(读:开发人员的错误,如空指针、非法参数等)引起的编程可恢复问题 在您的例子中,您希望继承自RuntimeException我认为JavaDocs可以说是一应俱全: 错误是 Throwable*即 表示严重的问题 合理应用*

我想处理带有(未检查的)异常的错误。我听说,对于每种异常,我都应该创建Error或RuntimeException的子类。 区别是什么?

应该识别编程上不可恢复的问题(例如内存不足)。应确定由代码无法控制的意外情况(例如数据库关闭)引起的程序可恢复问题。应该识别由代码流中的错误(读:开发人员的错误,如空指针、非法参数等)引起的编程可恢复问题


在您的例子中,您希望继承自
RuntimeException

我认为JavaDocs可以说是一应俱全:

错误
Throwable
*即 表示严重的问题 合理应用*不应 试着抓住。大多数这样的错误是错误的 异常情况。*这个
ThreadDeath
错误 “正常”状态,*也是一种
错误的子类
因为 大多数应用程序*不应尝试 抓住它


这些都是像堆栈溢出,内存不足。。。您希望扩展RuntimeException。

始终使用RuntimeException——我几乎从未见过出现错误的情况


我听说过关于创建自己的异常的同样的事情,但我真的不理解。通常它是有用的,但我一直使用InvalidArgumentException。

RuntimeException是一种特殊的异常,编译器不会捕获异常。错误是出现严重系统问题时抛出的错误。错误和RuntimeException之间没有密切的关系。您的异常似乎更接近RuntimeException。

为什么不创建自己的异常?当我编写catch块时,我希望它处理一种特定类型的异常,不是吗?从它的Javadoc:“这个异常是为JCA/JCE引擎类设计的,当一个无效参数传递给一个方法时抛出。”。你的意思不是更一般的
IllegalArgumentException
吗?是的,我知道。废话。我只是没在想。我会回去修好的。你知道,我几乎总是抛出一个例外,你会认为我会把它修好的。。。真尴尬。