Java中,异常的分类体系

时间:2024-10-23 14:56:24

Java 的异常体系为开发者提供了一种捕获和处理运行时错误的机制,用于处理在程序执行期间可能出现的错误和意外情况。主要的异常分类包括ErrorException,而Exception又可以进一步分为受检异常和非受检异常。

  • Error 表示严重的系统错误,不应该进行捕获。
  • 受检异常需要在编译时处理,通常用于外部资源(如 I/O、数据库等)。
  • 非受检异常可以不显式处理,通常由编程错误引起,如空指针、除以零等。

Throwable 类

在 Java中,所有的异常都是java.lang.Throwable类的子类。Throwable有两个主要的子类:

  • Error
  • Exception
  1. Error类

    • Error表示的是系统级的严重问题,通常无法通过编程来恢复或处理,例如虚拟机错误、内存不足等。
    • 一些常见的Error子类包括:
      • OutOfMemoryError:JVM内存耗尽。
      • *Error:栈溢出,例如递归调用过深导致栈空间耗尽。
    • Error通常表示程序中不应当捕获的异常,因为这些错误通常不是由编程错误引起的,而是运行环境的问题。
  2. Exception类

    • Exception类表示应用程序可以捕获并进行处理的异常。
    • Exception又进一步分为两种类型:受检异常(Checked Exception)非受检异常(Unchecked Exception)
    2.1 受检异常(Checked Exception)
    • 受检异常是那些在编译期就必须进行处理的异常,否则代码将无法通过编译。
    • Java 编译器强制检查这些异常的处理,因此开发者必须显式地捕获或声明抛出这些异常。
    • 典型的受检异常包括:
      • IOException:当进行I/O操作时可能发生的异常,例如文件不存在或无法读取。
      • SQLException:在与数据库交互时可能发生的异常,例如查询语法错误。
    2.2 非受检异常(Unchecked Exception)
    • 非受检异常是在程序运行时可能发生的异常,不需要在编译期进行强制处理。
    • 非受检异常通常是由编程错误引起的,例如逻辑错误或者错误的操作,通常是RuntimeException的子类。
    • 典型的非受检异常包括:
      • NullPointerException:对null引用调用方法或访问属性时发生。
      • ArrayIndexOutOfBoundsException:数组下标越界。
      • ArithmeticException:例如除以零的操作。

Java异常的继承结构总结

  • java.lang.Throwable
    • java.lang.Error(系统级别错误,不应捕获)
      • OutOfMemoryError
      • *Error
    • java.lang.Exception(应用级别错误,可以捕获处理)
      • 受检异常(必须显式捕获或声明)
        • IOException
        • SQLException
      • 非受检异常(不强制要求捕获)
        • RuntimeException
          • NullPointerException
          • ArrayIndexOutOfBoundsException
          • ArithmeticException