在例外层次结构中, RuntimeException
的后代和Error
的后代是运行时异常/错误。RuntimeException&Error
这两者之间的区别是:那些RuntimeException
下是 差引起的编程/设计的那些,和那些的Error
是 不能/不应由显影剂所控制的那些。
为了编码应用程序中的异常,例如 ,当发生业务逻辑中的某事时抛出异常, RuntimeException
被扩展。
的问题是,究竟是扩展 RuntimeException
和扩展Error
之间的区别 - 除了延长 Error
是不好的做法?
谁说它*是坏习惯?当然不是你每天都会做的事情,但我并不怀疑有些情况下它可能是值得的。 –
@HotLicks Joshua Bloch建议在他的着作Effective Java中这样做:“虽然Java语言规范并不要求它,但有一个强大的约定,即错误被JVM用来指示资源缺陷,不变的故障或其他由于几乎普遍接受这个约定,所以最好不要使用 来实现任何新的Error子类。因此,**所有未实现的可执行的throwables应该继承** RuntimeException(直接或间接的)。” – alfasin
@alfasin - 因此XYZ操作系统可能在检索系统时钟时检测到硬件故障,但它不应该调用该错误?一个控制化学工厂阀门的API可能会检测到硬件故障,并且不应该将其称为错误? –