Java中常见的异常分类,结合Spring的事务巩固复习

Java异常的继承关系是通过类继承的方式构建的一个层次结构。以下是对Java异常继承关系的详细图解说明:

异常类的顶层

  • Throwable:所有异常和错误的超类。

Throwable的子类

  • Error:通常是指与虚拟机相关的问题,如系统崩溃、虚拟机错误、动态链接失败等,这种错误无法恢复或不可能捕获,将导致应用程序中断。应用程序通常不应试图捕获Error对象。
  • Exception:表示程序本身可以处理的异常。

Exception的子类

  • 运行时异常(RuntimeException):编译器不要求强制处理的异常。常见的运行时异常包括NullPointerException(空指针异常)、IndexOutOfBoundsException(下标越界异常)、ArithmeticException(算术异常)等。这些异常一般是由程序逻辑错误引起的,程序应该从逻辑角度尽可能避免这类异常的发生。
  • 非运行时异常(检查异常,Checked Exception):编译器要求必须处理的异常。常见的检查异常包括IOException(输入输出异常)、SQLException(SQL异常)、ClassNotFoundException(类找不到异常)等。这些异常在编译时就需要被捕获或声明抛出。

异常继承关系的图解

由于无法直接在这里绘制图形,以下是用文字描述的异常继承关系图

Throwable  
├── Error  
└── Exception  
    ├── RuntimeException(运行时异常)  
    │   ├── NullPointerException  
    │   ├── IndexOutOfBoundsException  
    │   ├── ArithmeticException  
    │   └── ...(其他运行时异常)  
    └── (检查异常,Checked Exception)  
        ├── IOException  
        │   └── FileNotFoundException  
        ├── SQLException  
        ├── ClassNotFoundException  
        └── ...(其他检查异常)

异常处理的原则

  • 对于运行时异常,开发者应该通过编写健壮的代码来尽量避免它们的出现,而不是依赖捕获异常来处理它们。
  • 对于检查异常,开发者必须在方法签名中通过throws子句声明可能会抛出的异常,或者在方法内部使用try-catch语句块来捕获并处理这些异常。

常见的运行时异常(Runtime Exception)

运行时异常是在程序运行时可能发生的异常,它们通常是由程序中的逻辑错误或不当操作引发的。Java编译器不会强制要求捕获或声明这些异常,但开发者应当通过编写健壮的代码来尽量避免它们的出现。常见的运行时异常包括:

  1. NullPointerException:当应用程序试图在需要对象的地方使用null时抛出。
  2. IndexOutOfBoundsException:当索引超出字符串或数组的有效范围时抛出。例如,ArrayIndexOutOfBoundsExceptionStringIndexOutOfBoundsException
  3. ArithmeticException:当发生数学错误时抛出,如除以零。
  4. ClassCastException:当试图将对象强制转换为不兼容的类时抛出。
  5. ArrayStoreException:当试图将错误类型的对象存储到数组中时抛出。
  6. BufferOverflowException:当向缓冲区写入的数据超出其容量时抛出。
  7. ConcurrentModificationException:当在不允许修改时(如在迭代过程中)修改集合时抛出。

常见的检查异常(Checked Exception)

检查异常是在编译时进行检查的异常。如果方法可能抛出检查异常,但调用者没有捕获或声明该异常,则编译器会报错。常见的检查异常包括:

  1. IOException:当发生输入输出错误时抛出,如读写文件失败。
  2. FileNotFoundException:当试图打开的文件不存在时抛出,是IOException的子类。
  3. SQLException:当访问数据库时发生SQL错误或数据访问错误时抛出。
  4. ClassNotFoundException:当应用程序试图动态加载类(如在运行时使用Class.forName()方法)但找不到指定的类时抛出。
  5. InterruptedException:当线程在等待、睡眠或尝试加入另一个线程时被中断时抛出。
  6. ParseException:当尝试将字符串解析为日期或数字时格式不正确时抛出,如SimpleDateFormatparse()方法可能抛出此异常。

需要注意:当程序抛出检查异常时,Spring的事务管理 @Transactional 默认是不会生效的,需要着重注意,默认情况下只会捕获:RuntimeException 和 Error 类型的异常,检查异常需要捕获处理时,就需要设置 rollbackFor 参数为:Exception 或者 Throwable 扩大事务的捕获范围!

posted @ 2024-10-10 14:30  菜鸟的奋斗之路  阅读(72)  评论(0编辑  收藏  举报