RuntimeException和错误

Roa*_*oam 20 java runtime-error runtimeexception

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

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

例如,为了在应用程序中编写异常,在业务逻辑中发生某些事件时抛出异常,RuntimeException就会扩展.

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

Pit*_*ita 20

两者ErrorRuntimeException没有勾选的异常,这意味着它表明有该程序的缺陷,而且通常不应该被捕获.(NullPointerException,IndexOutOfBoundsException等)

我认为两者之间的主要区别在于RuntimeException表明程序存在错误,而且这Error是一个致命但不受程序控制的东西.(OutOfMemorryError,ThreadDeath等)

因此,对a进行子类化Error是不好的做法,因为错误通常不是程序可以在运行时修复的.在你的程序中,如果你需要扔东西,请使用Exception.


Sot*_*lis 7

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

你已经提到了主要的区别.Java语言规范用不同的术语说同样的东西.因为Error,它说

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

因为RuntimeException,它说

该类RuntimeException是Exception的直接子类. RuntimeException是表达式评估期间由于多种原因可能抛出的所有异常的超类,但仍可能从中 恢复.

你应该从这些引用中得到的是你常常会看到的

try {
   ...
} catch (Exception e) { // catches RuntimeException
   ...
}
Run Code Online (Sandbox Code Playgroud)

作为一个捕获所有案例,因为Exception是一个超级类型RuntimeException.但你几乎永远不会看到(我从未见过它)

try {
   ...
} catch (Error e) {
   ...
}
Run Code Online (Sandbox Code Playgroud)