Java的异常分类
song

Java 的异常体系是基于 Throwable 类设计的,所有异常和错误都继承自它。主要分为 Exception(异常)Error(错误) 两大类。

1
2
3
4
5
          Throwable
/ \
Error Exception
/ \
CheckedException UncheckedException (RuntimeException)

Error错误

  • Error 表示系统级错误,通常是 JVM 层面的问题,开发者一般不需要处理。
  • 这类错误通常不可恢复,程序很难继续运行。
  • 开发者通常不需要捕获 Error,而是应该优化代码以避免它们发生。

常见的Error类型

错误类 描述
OutOfMemoryError 内存溢出(如堆内存不足)
StackOverflowError 栈溢出(如递归调用过深)
VirtualMachineError JVM 相关错误
ThreadDeath 线程被强制终止

Exception

Exception 表示应用级的异常,开发者可以通过 try-catch 机制处理。
可以分为:

  • Checked Exception(受检异常、编译时异常) 编译时检查,必须处理
  • Unchecked Exception(非受检异常、运行时异常) 运行时异常,可以不处理

Checked Exception(受检异常)

  • 编译时必须处理,否则无法通过编译
  • 需要 try-catch 处理,或者 throws 抛出。
  • 直接继承自 Exception,但不属于 RuntimeException 及其子类。
  • 通常代表预期内的错误情况,例如 I/O 错误、数据库异常、文件未找到等,这些异常通常是可以恢复的或需要调用者显式处理的情况。

常见 Checked Exception

异常类 描述
IOException I/O 相关异常,如文件找不到
SQLException 数据库异常,如 SQL 语法错误
ClassNotFoundException 类加载失败
InterruptedException 线程被中断
FileNotFoundException 文件未找到
MalformedURLException URL 格式错误
ParseException 转换异常

Unchecked Exception(非受检异常)

  • 运行时异常不要求必须处理,如果不处理,程序会终止。
  • 继承自 **RuntimeException**。
  • 通常代表编程错误逻辑错误,例如空指针访问(NullPointerException)、数组越界(ArrayIndexOutOfBoundsException)、除以 0(ArithmeticException)等。这些异常往往由程序员错误引起,通常不应该在代码中主动捕获,而应通过改正代码来避免。
    常见 Unchecked Exception

常见 Unchecked Exception

异常类 描述
NullPointerException 访问 null 对象
ArrayIndexOutOfBoundsException 数组越界
ArithmeticException 除零错误
ClassCastException 类型转换异常
NumberFormatException 数字格式错误

自定义异常

在 Java 中,可以自定义异常,通常继承自 Exception(受检异常)或 RuntimeException(非受检异常)。

由 Hexo 驱动 & 主题 Keep