Java 异常概述
什么是异常?
在Java编程过程中,程序可能会遇到各种预期或非预期的问题情况,这些问题情况被称为"异常"。异常是程序执行过程中出现的一种特殊事件,它会中断程序的正常流程。
Java提供了一套完善的异常处理机制,帮助开发者管理和处理这些异常情况,以提高程序的健壮性和容错性。
为什么需要异常处理?
- 分离错误处理代码与常规代码
- 集中管理错误处理逻辑
- 向上传播错误信息
- 区分不同类型的错误
Java 异常类层次结构
Java异常类都继承自java.lang.Throwable
类,并分为两个主要分支:
异常分类
-
Error(错误):
- 表示严重的问题,通常是不可恢复的系统级错误
- 例如:
OutOfMemoryError
、StackOverflowError
- 一般不需要在代码中捕获和处理
-
Exception(异常):
- 检查型异常(Checked Exception):
- 编译期必须处理(通过try-catch或throws声明)
- 例如:
IOException
、SQLException
、ClassNotFoundException
- 非检查型异常(Unchecked Exception):
- 也称为运行时异常(RuntimeException)
- 编译器不强制处理
- 例如:
NullPointerException
、ArrayIndexOutOfBoundsException
、ArithmeticException
- 检查型异常(Checked Exception):
常见的Java异常
让我们看看一些最常见的Java异常及其产生原因:
异常类名 | 类型 | 常见原因 |
---|---|---|
NullPointerException | 运行时异常 | 尝试访问null对象的方法或属性 |
ArrayIndexOutOfBoundsException | 运行时异常 | 数组索引超出范围 |
ArithmeticException | 运行时异常 | 数学运算错误(如除以零) |
IOException | 检查型异常 | 输入/输出操作失败 |
SQLException | 检查型异常 | 数据库访问错误 |
ClassNotFoundException | 检查型异常 | 找不到类 |
IllegalArgumentException | 运行时异常 | 方法接收到不合法的参数 |
异常处理的基本方法
Java提供了几种处理异常的方式:
1. try-catch 语句
最基本的异常处理方式是使用try-catch块:
try {
// 可能抛出异常的代码
int result = 10 / 0; // 会抛出ArithmeticException
} catch (ArithmeticException e) {
// 处理特定类型的异常
System.out.println("发生算术异常: " + e.getMessage());
} catch (Exception e) {
// 处理其他类型的异常
System.out.println("发生其他异常: " + e.getMessage());
} finally {
// 无论是否发生异常,都会执行的代码
System.out.println("finally块总是被执行");
}
输出结果:
发生算术异常: / by zero
finally块总是被执行