未检查的异常

未检查的异常(Unchecked Exception)是指在编译时不需要强制捕获或声明的异常。

在 Java 中,未检查的异常是 RuntimeException 类及其子类的实例,以及 Error 类及其子类的实例。

未检查的异常通常表示程序中的逻辑错误或不应当发生的情况。

主要特点

  1. 不需要显式处理:编译器不会强制要求在代码中捕获或声明这些异常。开发者可以选择处理这些异常,也可以不处理。

  2. 程序逻辑错误:未检查的异常通常表示程序内部的逻辑错误,例如访问数组的非法索引、空指针引用等。它们通常表示错误的程序设计。

  3. 运行时异常:未检查的异常通常在程序运行时发生,而不是在编译时。例如:

    • NullPointerException
    • ArrayIndexOutOfBoundsException
    • ClassCastException

事务管理中的应用

在 Spring 中,默认情况下,只有未检查的异常(如 RuntimeException)会导致事务回滚。这意味着:

  • 如果方法执行中抛出未检查的异常,Spring 会自动回滚当前事务。
  • 如果方法执行中抛出已检查的异常(如 IOException),Spring 默认不会回滚事务,除非在 @Transactional 注解中显式指定 rollbackFor 属性。

这种设计是为了防止因业务逻辑的可预见性错误而导致的事务回滚,从而提供更大的灵活性。