java 一些常见的异常
·
Java 中的异常分为两大类:Checked Exception(受检异常) 和 Unchecked Exception(非受检异常),此外还有 Error(错误) 表示系统级故障。以下是常见的异常类型及说明:
一、Unchecked Exception(非受检异常,继承自 RuntimeException)
无需显式捕获或声明抛出,通常由编程错误导致。
-
NullPointerException(空指针异常)
- 调用空对象的方法或访问其属性时抛出。
- 示例:
String str = null; str.length();
-
ArrayIndexOutOfBoundsException(数组下标越界异常)
- 访问数组不存在的索引时抛出。
- 示例:
int[] arr = new int[2]; arr[3] = 1;
-
IndexOutOfBoundsException(索引越界异常)
- 集合 / 字符串索引越界的父类(如
StringIndexOutOfBoundsException)。
- 集合 / 字符串索引越界的父类(如
-
ClassCastException(类型转换异常)
- 强制类型转换失败时抛出。
- 示例:
Object obj = "hello"; Integer num = (Integer) obj;
-
IllegalArgumentException(非法参数异常)
- 方法接收到无效参数时抛出(如负数传入需正数的方法)。
-
ArithmeticException(算术异常)
- 算术运算错误(如除以零)。
- 示例:
int a = 1 / 0;
-
NumberFormatException(数字格式异常)
- 字符串无法转换为数字时抛出。
- 示例:
Integer.parseInt("abc");
-
UnsupportedOperationException(不支持的操作异常)
- 调用不支持的方法时抛出(如只读集合调用
add())。
- 调用不支持的方法时抛出(如只读集合调用
二、Checked Exception(受检异常,继承自 Exception)
必须显式捕获或声明抛出,通常由外部环境问题导致。
-
IOException(输入输出异常)
- I/O 操作失败时抛出(如文件未找到、读取错误),子类包括:
FileNotFoundException:文件不存在。EOFException:读取到文件末尾。
- I/O 操作失败时抛出(如文件未找到、读取错误),子类包括:
-
SQLException(SQL 异常)
- 数据库操作错误(如连接失败、SQL 语法错误)。
-
ClassNotFoundException(类未找到异常)
- 加载类失败(如类路径错误)。
- 示例:
Class.forName("com.mysql.jdbc.Driver");(驱动缺失)。
-
InterruptedException(中断异常)
- 线程被中断时抛出(如
Thread.sleep()被打断)。
- 线程被中断时抛出(如
-
ParseException(解析异常)
- 字符串解析失败(如日期格式错误)。
- 示例:
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); sdf.parse("2023/12/31");
三、Error(错误,继承自 Error)
系统级错误,通常无法恢复,无需捕获。
-
OutOfMemoryError(内存溢出错误)
- JVM 内存不足(如创建大量对象未释放)。
-
StackOverflowError(栈溢出错误)
- 方法递归调用过深导致栈耗尽。
-
NoClassDefFoundError(类定义未找到错误)
- 运行时找不到类的定义(区别于
ClassNotFoundException,前者是编译时存在、运行时缺失)。
- 运行时找不到类的定义(区别于
四、自定义异常
通过继承 Exception(受检)或 RuntimeException(非受检)实现:
class MyException extends Exception {
public MyException(String message) {
super(message);
}
}
总结
- Unchecked:编程错误,优先通过代码逻辑避免(如判空、校验参数)。
- Checked:外部环境问题,需显式处理(捕获或抛出)。
- Error:系统故障,通常无法处理,需优化程序或调整环境。
更多推荐


所有评论(0)