有一个com.myco.myproj.MyProjRuntimeException是否有任何意义, 哪个完整的扩展了RuntimeException?
答案 0 :(得分:7)
是。 执行抛出未经检查的异常,并将其子类化。
关于检查异常是否确实有任何好处,有很多话题。简而言之,如果我抛出一个检查过的异常,我的客户真的与它有什么关系吗?
未经检查的异常是一种向客户通知异常情况(包括非法的前提条件)的好方法,并且不会给需要用try-catch块包装对API的调用负担,这大部分时间基本上都是除调试,追踪等外,没有任何目的。
那为什么不抛出RuntimeException
?它不是优雅,而且不太可读。使它成为你自己的异常,它是从它派生的,即使它是无缘无故的,除了在抛出异常时更具体。
答案 1 :(得分:2)
这取决于您是否希望以不同于调用堆栈之外的其他异常来处理异常条件。如果您打算捕获并处理异常,那么我建议您创建自定义类型。它使代码更清晰,更清晰的catch子句。如果您不想捕获异常,则可能没有理由创建新类型。
答案 2 :(得分:1)
不是真的。只需设置标准RuntimeException
的消息字符串,就可以通过在堆栈跟踪中显示异常名称获得的额外信息。但是(想到它),将RuntimeException
子类化为仅在自定义字符串上添加任何消息可能是有用的。
我倾向于只进行自定义检查异常;通常,标准的未经检查的例外情况已经涵盖了足够的潜在案例。
答案 3 :(得分:1)
维护自己的异常层次结构是一种很好的方式。
但是我看到只有少数人可以利用这种技术获得真正的利润。
答案 4 :(得分:1)
在Effective Java中,Joshua Bloch写道:
使用运行时异常来指示 编程错误。绝大多数 运行时异常表明 违反前提条件。
话虽这么说,您可以将该运行时异常用作项目中使用的运行时异常层次结构的基类。这样,错误就变得更加清晰和可追溯。
答案 5 :(得分:1)
检查异常的很多人(我和包含C#的设计师)believe是一个失败的语言实验并避免使用它们。然后,在RuntimeException下创建自己的异常层次结构是一个明显的步骤。
答案 6 :(得分:1)
在我看来,如果你真的需要它们,你应该只创建新的例外,即想要抓住它们并对它们进行特定的处理。在所有其他情况下,我并没有真正看到它的用处。
答案 7 :(得分:0)
答案 8 :(得分:0)
基于如何处理的子类例外而不是谁编写它们......
通常,运行时异常不能以记录错误的方式处理,并且可能显示错误消息。
已检查的异常可能具有特定的回退,在这种情况下,它们应该不会子类化“MyFrameWorkException” - 因为在这种情况下,捕获MyFrameWorkException不会比泛型catch(日志记录等)更多
除了它们属于特定框架的事实之外,发明一个完全没有共同点的完整异常是一个相当不好的做法。 (据说这些包用于此。)
完全可以继承RuntimeException(如果现有的子类不合适)
记录未经检查的例外情况。保守检查异常,不要构建层次结构。