【问题标题】:Proper use of RuntimeException? [duplicate]正确使用RuntimeException? [复制]
【发布时间】:2011-05-13 03:19:12
【问题描述】:

可能重复:
In Java, when should I create a checked exception, and when should it be a runtime exception?

我什么时候应该从RuntimeException 而不是Exception 派生异常?

RuntimeException 不必在方法的throws 子句中声明,这可能是,因为它不必特别列出或不好,因为明确声明方法的异常是一种好习惯。

想法?

【问题讨论】:

标签: java exception runtimeexception


【解决方案1】:

来自Unchecked Exceptions -- The Controversy

如果可以合理地预期客户 从异常中恢复,让它 已检查的异常。如果一个客户 不能做任何事情来恢复 例外,将其设为未选中 例外。

请注意,未经检查的异常是从RuntimeException 派生的,而已检查的异常是从Exception 派生的。

如果客户端无法从异常中恢复,为什么要抛出RuntimeException?文章解释:

运行时异常代表问题 这是编程的结果 问题,因此,API 客户端 不能合理地期望代码 从他们身上恢复或处理他们 反正。此类问题包括 算术异常,例如 除以零;指针异常, 比如试图访问一个对象 通过空引用;和索引 例外情况,例如试图 通过一个访问数组元素 索引太大或太小。

【讨论】:

    【解决方案2】:

    在企业应用程序开发中有许多场景,您会使用 RuntimeException 而不是 Exception。以下是两种非常常见的情况:

    • 在将异常处理作为一个方面来实现(分离关注设计原则)时,在大多数现代框架中,您将声明式处理异常并关联特定的异常处理块,而不是对其进行硬编码。一个很好的例子是 Spring 中的 JDBC 模板,它将所有 SQL 异常转换为 RuntimeException,因此开发人员在编写数据访问逻辑时不会编写 try catch 块。您可以以声明方式定义异常处理程序,该处理程序可以在开发环境中提供不同的行为。以及生产中的不同行为。在 Struts 1.x Action 类中也有类似的实现,其中执行方法被声明为抛出异常,并且在 struts-config 中映射了单独的 ExceptionHandler 用于处理特定的异常。虽然这不是 RuntimeException 的例子,但设计原理是一样的,将正常执行和异常处理的关注点分开。
    • RuntimeException 的另一个用途是在 EJB 和其他事务管理器中,其中事务由容器控制。按照惯例,在此类容器中,如果您从代码中抛出 RuntimeException,则事务将回滚 - 如果您抛出异常,则不会发生同样的情况。

    这是我立即想到的两个重要场景,但当然还有其他场景。

    【讨论】:

      猜你喜欢
      • 2020-03-24
      • 1970-01-01
      • 2016-03-09
      • 2014-03-31
      • 1970-01-01
      • 2022-08-16
      • 2021-09-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多