java - 何时应公布异常情况以及何时应进行处理的经验规则

标签 java exception

我有方法x,它调用其中的另一个名为y的方法,该方法抛出异常MyException。此时我有 2 个选择,要么宣传我的方法 x ,但异常 MyException ... 就像

public void x() throws MyException {
// call to y
}

(因为 y 是通过这样的 throws 子句进行广告的...)

public void y() throws MyException {
// code
}

或者将我的方法 x 中对 y 的调用包装在 try catch block 中并处理它?像这样..

public void x() {
 try {
   // call to y
 } catch (MyException e) {
   // handle exception
 } 
}

经验法则是什么?

最佳答案

如果您的方法可以与其调用者保持契约,无论异常如何,那么该异常就是它可以而且可能应该处理的东西。

如果调用者会困惑地发现他们说“do x”,并且执行“x”的“y”部分存在内部问题,因为“x”并没有真正完成,那么你应该公开异常(或以 MyException 作为原因的其他异常)。

并且 - 考虑调用者是否可以合理地处理异常,或者程序是否有任何理由继续运行,如果答案是否定的,请考虑使用 RuntimeException分别为错误

无论如何,这就是我想说的。

关于java - 何时应公布异常情况以及何时应进行处理的经验规则,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10612203/

相关文章:

java - 在哪里可以下载 JPA 2.0 的 JavaDoc?

javascript - 如何将数据从 jsp 页面中的表单 onclick 发送到 servlet?

java - 什么是堆栈溢出错误?

c# - 为什么我的异常没有被捕获?

java - 抛出或重新抛出异常?

java - JPA:使用计数直接将集合大小映射到属性?

java - 对象和实例是一回事吗?

java - 如何自定义使用 Hibernate 的 hbm2ddl(使用注释)生成的 DDL?

.net - 为什么我的WCF服务返回10次调用后超时的FaultException?

c++ - C++ 中定义异常类和抛出异常的标准方法