Throwable
和 Exception
在 Java 异常处理机制中扮演着不同的角色:
-
Throwable:
java.lang.Throwable
是 Java 中所有异常和错误的顶级超类,它是异常层次结构的根。- 所有的错误和异常对象都必须是
Throwable
或其子类的实例。 - Throwable 类有两个直接子类:
Error
和Exception
。
-
Error:
Error
类及其子类表示系统级的错误,通常是不可预见的、严重的故障,如 JVM 内存溢出(OutOfMemoryError
)、系统崩溃(VirtualMachineError
)等。- 这些错误通常表明系统处于不正常状态,应用程序无法进行有效的恢复操作。
- 开发者通常不需要也无法针对这些错误编写处理代码,因为它们通常代表着系统层面的失败。
-
Exception:
Exception
类及其子类代表的是程序运行时可能出现的问题,这些问题可以通过编程手段来处理和恢复。- Exception 分为两大类:
- 受检异常(Checked Exception):如
IOException
、SQLException
等,在方法签名中需要声明或捕获的异常,编译器会强制开发者处理这些异常,否则代码无法通过编译。 - 运行时异常(Unchecked Exception / RuntimeException):如
NullPointerException
、ArrayIndexOutOfBoundsException
、IllegalArgumentException
等,这些异常在编译时不强制处理,但在运行时如果发生,通常会导致程序中断执行,除非被捕获并在catch块中处理。
- 受检异常(Checked Exception):如
总结来说,Throwable
是 Java 异常体系的基础,而 Exception
是一种可以被捕获并处理的程序运行时遇到的问题的抽象,它涵盖了大多数编程过程中可能遇到的异常状况;而 Error
则表示更底层、更严重的系统错误,一般不适合也不期望在应用层代码中进行捕获和处理。