跳到主要内容

Java异常

提示
  1. 异常定义:异常是程序执行过程中的意外事件,可能导致程序异常终止,由各种原因引起,如无效的输入、设备故障、代码错误等。
  2. 异常层次结构:Java 中的异常有两个主要分支:Error(表示不可恢复的情况,通常不应被处理)和 Exception(可捕获并处理的异常)。
  3. 异常类型:异常分为运行时异常(RuntimeException,编程错误导致,如 NullPointerException)和已检查异常(IOException,编译时检查,如 FileNotFoundException)。

异常是在程序执行过程中发生的意外事件。它影响了程序指令的流程,可能导致程序异常终止。

异常可能由许多原因引起。其中一些原因包括:

  • 无效的用户输入
  • 设备故障
  • 网络连接丢失
  • 物理限制(如磁盘内存不足)
  • 代码错误
  • 打开一个无法访问的文件

Java 异常层次结构

这是 Java 中异常层次结构的简化图。

Java 中的异常层次结构

如图所示,Throwable 类是层次结构中的根类。

注意,层次结构分为两个分支:错误(Error)和异常(Exception)。

错误

错误(Errors) 表示不可恢复的情况,如 Java 虚拟机(JVM)内存不足、内存泄漏、栈溢出错误、库不兼容、无限递归等。

错误通常超出程序员的控制范围,我们不应尝试处理错误。

异常

异常(Exceptions) 可以被程序捕获并处理。

当方法内部发生异常时,它会创建一个对象。这个对象称为异常对象。

它包含有关异常的信息,如异常的名称和描述,以及发生异常时程序的状态。

我们将在下一个教程中学习如何处理这些异常。在本教程中,我们将重点介绍 Java 中不同类型的异常。

Java 异常类型

异常层次结构也有两个分支:RuntimeExceptionIOException

1. RuntimeException

运行时异常(RuntimeException) 是由于编程错误而发生的。它们也被称为未检查异常(unchecked exceptions)

这些异常在编译时不会被检查,而是在运行时检查。一些常见的运行时异常包括:

  • 不当使用 API - IllegalArgumentException
  • 空指针访问(未初始化变量)- NullPointerException
  • 数组越界访问 - ArrayIndexOutOfBoundsException
  • 数字除以 0 - ArithmeticException

你可以这样理解:“如果是运行时异常,那就是你的错”。

如果在使用变量之前检查了变量是否已初始化,就不会发生 NullPointerException

如果在使用数组索引之前测试了数组索引与数组边界,就不会发生 ArrayIndexOutOfBoundsException

2. IOException

IOException 也被称为已检查异常(checked exception)。它们在编译时被编译器检查,程序员被提示处理这些异常。

一些已检查异常的示例包括:

  • 尝试打开一个不存在的文件会导致 FileNotFoundException
  • 尝试读取文件末尾之后的内容

现在我们已经了解了异常,下一个教程我们将学习处理异常