正确使用RuntimeException?

Ton*_*ony 18 java exception runtimeexception

可能重复:
在Java中,何时应该创建已检查的异常,何时应该是运行时异常?

我什么时候应该从中派生例外RuntimeException而不是Exception

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

思考?

Der*_*har 55

未经检查的例外 - 争议:

如果可以合理地期望客户端从异常中恢复,则将其作为已检查的异常.如果客户端无法执行任何操作以从异常中恢复,请将其设置为未经检查的异常.

请注意,未经检查的异常是派生自RuntimeException的异常,并且已检查的异常是派生自的异常Exception.

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

运行时异常表示编程问题导致的问题,因此,无法合理地期望API客户端代码从它们恢复或以任何方式处理它们.这些问题包括算术异常,例如除以零; 指针异常,例如尝试通过空引用访问对象; 和索引异常,例如尝试通过索引太大或太小来访问数组元素.


Rut*_*ani 13

在企业应用程序开发中有许多场景,您将使用RuntimeException而不是Exception.以下是两个非常常见的场景:

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

这些是我立刻想到的两个重要场景,但会有其他场景.