Java 中的异常分为两大类:Checked Exception(受检异常) 和 Unchecked Exception(非受检异常),此外还有 Error(错误) 表示系统级故障。以下是常见的异常类型及说明:

一、Unchecked Exception(非受检异常,继承自 RuntimeException)

无需显式捕获或声明抛出,通常由编程错误导致。

  1. NullPointerException(空指针异常)

    • 调用空对象的方法或访问其属性时抛出。
    • 示例:String str = null; str.length();
  2. ArrayIndexOutOfBoundsException(数组下标越界异常)

    • 访问数组不存在的索引时抛出。
    • 示例:int[] arr = new int[2]; arr[3] = 1;
  3. IndexOutOfBoundsException(索引越界异常)

    • 集合 / 字符串索引越界的父类(如 StringIndexOutOfBoundsException)。
  4. ClassCastException(类型转换异常)

    • 强制类型转换失败时抛出。
    • 示例:Object obj = "hello"; Integer num = (Integer) obj;
  5. IllegalArgumentException(非法参数异常)

    • 方法接收到无效参数时抛出(如负数传入需正数的方法)。
  6. ArithmeticException(算术异常)

    • 算术运算错误(如除以零)。
    • 示例:int a = 1 / 0;
  7. NumberFormatException(数字格式异常)

    • 字符串无法转换为数字时抛出。
    • 示例:Integer.parseInt("abc");
  8. UnsupportedOperationException(不支持的操作异常)

    • 调用不支持的方法时抛出(如只读集合调用 add())。

二、Checked Exception(受检异常,继承自 Exception)

必须显式捕获或声明抛出,通常由外部环境问题导致。

  1. IOException(输入输出异常)

    • I/O 操作失败时抛出(如文件未找到、读取错误),子类包括:
      • FileNotFoundException:文件不存在。
      • EOFException:读取到文件末尾。
  2. SQLException(SQL 异常)

    • 数据库操作错误(如连接失败、SQL 语法错误)。
  3. ClassNotFoundException(类未找到异常)

    • 加载类失败(如类路径错误)。
    • 示例:Class.forName("com.mysql.jdbc.Driver");(驱动缺失)。
  4. InterruptedException(中断异常)

    • 线程被中断时抛出(如 Thread.sleep() 被打断)。
  5. ParseException(解析异常)

    • 字符串解析失败(如日期格式错误)。
    • 示例:SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); sdf.parse("2023/12/31");

三、Error(错误,继承自 Error)

系统级错误,通常无法恢复,无需捕获。

  1. OutOfMemoryError(内存溢出错误)

    • JVM 内存不足(如创建大量对象未释放)。
  2. StackOverflowError(栈溢出错误)

    • 方法递归调用过深导致栈耗尽。
  3. NoClassDefFoundError(类定义未找到错误)

    • 运行时找不到类的定义(区别于 ClassNotFoundException,前者是编译时存在、运行时缺失)。

四、自定义异常

通过继承 Exception(受检)或 RuntimeException(非受检)实现:

class MyException extends Exception {
    public MyException(String message) {
        super(message);
    }
}

总结

  • Unchecked:编程错误,优先通过代码逻辑避免(如判空、校验参数)。
  • Checked:外部环境问题,需显式处理(捕获或抛出)。
  • Error:系统故障,通常无法处理,需优化程序或调整环境。
Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐