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(方法接收到非法参数)等。虽然不需要在编译时处理,但在开发过程中应尽量避免这些异常的发生,因为它们可能导致程序崩溃。