Skip to content

1. 异常类继承层次图

text
Throwable
├── Error
│   ├── VirtualMachineError
│   │   ├── OutOfMemoryError
│   │   │   ├── JavaHeapSpace
│   │   │   ├── PermGen space (在Java 8之前)
│   │   │   └── Metaspace (从Java 8开始)
│   │   └── StackOverflowError
│   ├── LinkageError
│   │   ├── ClassNotFoundException
│   │   └── UnsatisfiedLinkError
│   └── AssertionError
└── Exception
    ├── RuntimeException
    │   ├── NullPointerException
    │   ├── ArrayIndexOutOfBoundsException
    │   ├── StringIndexOutOfBoundsException
    │   ├── ArithmeticException
    │   │   └── DivideByZeroException
    │   ├── IllegalArgumentException
    │   │   ├── NumberFormatException
    │   │   └── IllegalThreadStateException
    │   ├── IllegalStateException
    │   ├── ConcurrentModificationException
    │   ├── UnsupportedOperationException
    │   └── ClassCastException
    ├── IOException
    │   ├── FileNotFoundException
    │   ├── EOFException
    │   ├── InterruptedIOException
    │   ├── MalformedURLException
    │   ├── UnknownHostException
    │   └── SocketException
    ├── SQLException
    │   ├── SQLSyntaxErrorException
    │   ├── SQLTimeoutException
    │   └── SQLIntegrityConstraintViolationException
    ├── InterruptedException
    ├── CloneNotSupportedException
    └── NoSuchMethodException

2. 异常类说明

2.1. Throwable 类

  • Throwable 是 Java 中所有错误(Error)和异常(Exception)类的超类。它提供了一些通用的方法,如 getMessage() 获取异常信息,printStackTrace() 在控制台打印异常堆栈跟踪信息等。
  • 任何可抛出的对象都必须是 Throwable 类或其子类的实例。

2.2. Error 类

  • Error 类是 Throwable 的子类,用于表示严重的、通常是不可恢复的错误,这些错误通常由 Java 虚拟机(JVM)或运行时环境抛出。例如,OutOfMemoryError(内存溢出错误)表示 JVM 耗尽了内存资源,StackOverflowError(栈溢出错误)表示线程的调用栈溢出。
  • 应用程序通常不应该捕获 Error 类型的异常,因为它们通常意味着程序无法继续正常运行,捕获并处理这些错误可能会导致不可预测的行为。

2.3. Exception 类

  • Exception 类也是 Throwable 的子类,用于表示可以被应用程序捕获和处理的异常情况。它又进一步分为受检异常(Checked Exception)和非受检异常(Unchecked Exception,即运行时异常 RuntimeException 及其子类)。
  • 受检异常:在编译时,编译器会强制要求处理这类异常,要么使用 try - catch 块捕获,要么通过 throws 关键字声明抛出。常见的受检异常包括 IOException(用于处理输入输出操作相关的异常,如文件读取失败、网络连接问题等)、SQLException(用于处理数据库操作相关的异常,如 SQL 语法错误、数据库连接失败等)。
  • 非受检异常(运行时异常):以 RuntimeException 类为根,这类异常在编译时不需要显式处理。它们通常是由于程序逻辑错误导致的,例如 NullPointerException(试图访问空对象的成员)、ArrayIndexOutOfBoundsException(访问数组时索引超出范围)、IllegalArgumentException(方法接收到非法参数)等。虽然不需要在编译时处理,但在开发过程中应尽量避免这些异常的发生,因为它们可能导致程序崩溃。