异常是在程序执行期间发生的意外事件。它会影响程序的指令流,可能导致程序异常终止。
异常可能因多种原因而发生。其中一些是
- 无效的用户输入
- 设备故障
- 网络连接丢失
- 物理限制(磁盘空间不足)
- 代码错误
- 打开不存在的文件
Java 异常层级结构
这是 Java 异常层级结构的简化图。

从上图可以看出,Throwable
类是层级结构中的根类。
请注意,层级结构分为两个分支:Error 和 Exception。
Errors
Errors 表示无法恢复的状况,例如 Java 虚拟机 (JVM) 内存不足、内存泄漏、堆栈溢出错误、库不兼容、无限递归等。
错误通常超出了程序员的控制范围,我们不应该尝试处理错误。
Exceptions
异常可以被程序捕获和处理。
当 方法 中发生异常时,会创建一个对象。此对象称为异常对象。
它包含有关异常的信息,例如异常的名称和描述以及异常发生时程序的状.
我们将在下一个教程中学习如何处理这些异常。在本教程中,我们将重点介绍 Java 中不同类型的异常。
Java 异常类型
异常层级结构也有两个分支:RuntimeException
和 IOException
。
1. RuntimeException
运行时异常是由于编程错误而发生的。它们也称为非检查型异常。
这些异常在编译时不会被检查,而是在运行时被检查。一些常见的运行时异常是
- API 使用不当 -
IllegalArgumentException
- 空指针访问(变量未初始化) -
NullPointerException
- 数组索引越界访问 -
ArrayIndexOutOfBoundsException
- 数字除以 0 -
ArithmeticException
你可以这样理解:“如果是运行时异常,那是你的错”。
如果在使用变量之前检查了变量是否已初始化,则不会发生 NullPointerException
。
如果将数组索引与数组边界进行测试,则不会发生 ArrayIndexOutOfBoundsException
。
2. IOException
IOException
也称为检查型异常。它们在编译时由编译器检查,并且会提示程序员处理这些异常。
一些检查型异常的示例是
- 尝试打开一个不存在的文件会导致
FileNotFoundException
- 尝试读取超出文件末尾
现在我们了解了异常,我们将在下一个教程中学习 异常处理。