我最近被问到一个问题,显然是在访谈中,关于扩展java.lang.RuntimeException。
我被要求引用一个示例,其中需要扩展java.lang.RuntimeException。
我一直认为我们不需要扩展RuntimeException,任何人都可以启发我吗?
谢谢, SB
答案 0 :(得分:4)
一层的运行时异常是另一层检查(并被处理)异常。
我可以看到容器,例如servlet容器; REPL和/或任何顶级解释器循环;合法地选择和捕获RuntimeExceptions,因为它们不应该因为某些东西在堆栈中更加繁荣而崩溃。
与容器情况类似,跨越邻接边界,例如交叉层或层通常需要更明确的异常语义。
如果'cause'和/或message属性在语义上证明不足以表达“hey,it broken”之外的任何内容,并且客户端/更高层可以选择性地行动,那么子类RuntimeException可能是合法的。
答案 1 :(得分:3)
当您创建不必显式捕获的异常(未经检查的异常)时,您希望扩展RuntimeException。这是异常情况,表示通常无法恢复的问题(例如,死数据库)。
您应该take a look了解Java中已检查和未检查的异常之间的区别。
答案 2 :(得分:0)
RuntimeException是的超类 那些可以抛出的异常 在正常运作期间 Java虚拟机。
声明输入不需要方法 它的throws子句的任何子类 可能抛出的RuntimeException 在执行方法期间但是 没被抓住。
答案 3 :(得分:0)
RuntimeException是在Java虚拟机正常运行期间可以抛出的那些异常的超类。
如果向jdk添加新功能,或者修改了jvm实现,则应该扩展RuntimeException以添加新的RuntimeException。
答案 4 :(得分:0)
您应该继续使用这些异常不应该扩展,因为它通常应该在不再执行操作且操作应该中断的地方使用。
但是如果你需要为这种情况找到一个应用程序,你可以说通过创建不同类型的RuntimeException,我们可以在异常处理程序中有更多控制来显示异常等消息但是恕我直言这只是一个玩说话。
答案 5 :(得分:0)
当客户端无法从程序中合理恢复时,我会抛出Runtime Exceptions, 这些通常是未经检查的异常,主要是代码中的错误,客户端不希望在运行时恢复
示例:数据源的死链接,JNDI绑定失败,某些操作的前置条件失败(分母为零的除法)是此RuntimeException子类的方案