Java异常处理机制简介(新手边看)
在日常生活中,如果有人身体某个部位不舒服,该部位和正常情况相比有些不同,其功能受到影响,我们就会判断这个人生病了。在程序执行过程中,如果出现非预期情况,最终导致 JVM 非正常停止,我们就称程序“生病了”,即发生异常了。
Java 的异常处理机制提供了一种结构化的方式来处理程序运行时可能出现的错误情况。它使程序能够在出现问题时,以一种可控的方式进行处理,而不是突然崩溃。通过对异常的处理,程序员可以更好地预测和处理可能出现的问题,提高程序的稳定性和可靠性。
Java 异常体系如下图所示:

图 1 Java异常体系
Error 是在正常环境中不希望被程序捕获的异常。Java 在运行中使用 Error 来显示与系统本身相关的错误。堆栈溢出就是这种错误的一个例子。
Exception 用于表示代码程序可能出现的异常情况,它用创建自定义异常类的父类来表示异常。异常产生后,程序员可以通过代码方式纠正,使程序继续运行。Exception 又可以细分为运行时异常和非运行时异常,也称为未检查异常和检查异常。
运行时异常都是 RuntimeException 类及其子类,这些异常是未检查异常。在程序中,你可以选择捕获和处理这些异常,也可以不理会。这些异常通常是由程序中的逻辑错误引起的,程序应该尽可能避免此类异常。
非运行时异常是 RuntimeException 以外的异常,也称为检查异常。它们都属于 Exception 类及其子类。对这种异常,Java 编译器强制要求进行捕获处理,否则程序无法通过编译(受 Java 编译器检查)。
下表列出了一些常用的异常类及其说明:
Java 的异常处理机制提供了一种结构化的方式来处理程序运行时可能出现的错误情况。它使程序能够在出现问题时,以一种可控的方式进行处理,而不是突然崩溃。通过对异常的处理,程序员可以更好地预测和处理可能出现的问题,提高程序的稳定性和可靠性。
Java异常体系结构
Java 语言有强大的异常处理机制,能够将代码控制权从出错点转移到最近的异常处理器。异常机制能够帮助我们找到程序中的问题,Java 中异常的基类是 java.lang.Throwable,其下有两个异常分支,分别是 java.lang.Error 和 java.lang.Exception,代码中抛出的异常通常指 java.lang.Exception。Java 异常体系如下图所示:

图 1 Java异常体系
Error 是在正常环境中不希望被程序捕获的异常。Java 在运行中使用 Error 来显示与系统本身相关的错误。堆栈溢出就是这种错误的一个例子。
Exception 用于表示代码程序可能出现的异常情况,它用创建自定义异常类的父类来表示异常。异常产生后,程序员可以通过代码方式纠正,使程序继续运行。Exception 又可以细分为运行时异常和非运行时异常,也称为未检查异常和检查异常。
运行时异常都是 RuntimeException 类及其子类,这些异常是未检查异常。在程序中,你可以选择捕获和处理这些异常,也可以不理会。这些异常通常是由程序中的逻辑错误引起的,程序应该尽可能避免此类异常。
非运行时异常是 RuntimeException 以外的异常,也称为检查异常。它们都属于 Exception 类及其子类。对这种异常,Java 编译器强制要求进行捕获处理,否则程序无法通过编译(受 Java 编译器检查)。
Java常用异常类
Java 预定义了很多异常类,位于 java.lang 包中,用于对程序中不同异常的声明或抛出,我们应该根据异常类型去合理处理或抛出合适的异常。下表列出了一些常用的异常类及其说明:
异常类 | 说明 |
---|---|
Exception | 异常层次结构的根类 |
RuntimeException | 运行时异常,多数 java.lang 异常的根类 |
ArithmeticException | 算术异常,如用零做除数 |
ArrayIndexOutOfBoundsException | 数组小于或大于实际的数组大小 |
NullPointerException | 尝试访问 null 对象成员,空指针异常 |
ClassNotFoundException | 不能加载所需的类 |
NumberFormatException | 数字转化格式异常,如从字符串到 float 型数字的转换无效 |
IOException | I/O 异常的根类 |
FileNotFoundException | 找不到文件 |
EOFException | 文件结束 |
InterruptedException | 线程中断 |
IllegalArgumentException | 方法接收到非法参数 |
ClassCastException | 类型转换异常 |
SQLException | 数据库操作异常 |