Java 异常分类

Java 异常的核心分类是三大类 ,基于继承关系(都继承自 Throwable 顶层父类)划分,同时也分为受检异常 和非受检异常两种处理机制,这是开发中最常用的划分方式。

一、顶层父类:Throwable

所有异常和错误的根类 ,只有它的子类才能被 JVM 识别为可抛出对象。

两个直接子类:

  1. Error(错误)
  2. Exception(异常)

二、核心三大分类

1. Error(错误)

  • 定义 :JVM 层面的严重系统错误,程序无法处理、无法恢复。
  • 特点 :
    • 代码无需捕获/抛出,捕获了也没用;
    • 由 JVM 自动抛出,一旦发生程序大概率崩溃。
  • 常见例子 :
    • StackOverflowError:栈溢出(递归死循环)
    • OutOfMemoryError:内存溢出(OOM)
    • NoClassDefFoundError:类找不到

2. 运行时异常(RuntimeException)

  • 定义 :程序运行期间 才会触发的逻辑错误,属于非受检异常。
  • 特点 :
    • 代码不强制要求捕获/处理;
    • 由代码逻辑问题导致(空指针、数组越界等)。
  • 常见例子 :
    • NullPointerException:空指针异常
    • IndexOutOfBoundsException:数组/集合越界
    • IllegalArgumentException:参数不合法
    • ClassCastException:类型转换异常

3. 编译时异常(受检异常 Checked Exception)

  • 定义 :编译阶段 就必须处理的异常,属于受检异常。
  • 特点 :
    • 编译器强制要求捕获(try-catch)或声明抛出(throws);
    • 通常是外部环境问题(文件、网络、数据库等)。
  • 常见例子 :
    • IOException:IO 流异常(文件读写失败)
    • SQLException:数据库操作异常
    • FileNotFoundException:文件找不到
    • ClassNotFoundException:类加载失败

三、两种处理机制分类(开发重点)

类型 包含 处理要求 触发时机
非受检异常 Error + 运行时异常 不强制处理 运行时
受检异常 除运行时外的所有 Exception 编译器强制处理 编译时

四、完整继承关系图

复制代码
Throwable
├── Error(错误,JVM 崩溃级,不处理)
└── Exception(异常,程序可处理)
    ├── RuntimeException(运行时异常,非受检)
    │   ├── NullPointerException
    │   ├── IndexOutOfBoundsException
    │   └── ...
    └── 编译时异常(受检异常)
        ├── IOException
        ├── SQLException
        └── ...

总结

  1. Error:系统崩了,代码管不了;
  2. 运行时异常:代码逻辑错了,可处理可不处理;
  3. 编译时异常 :外部环境问题,必须处理。
相关推荐
扶风ff4 分钟前
练题簿在线免费刷题:会员线下组卷、Word 试卷与成绩导入,课堂检测更方便
java·开发语言·算法·小程序·word
鱼宵5 分钟前
Spring AI 可观测与透明化:traceId 串起全链路,思考过程实时直播给用户
java·人工智能·spring·链路追踪·springai
程序员老陆8 分钟前
C++ 多线程通信方式全景:从共享内存到结构化协调
开发语言·c++
Raas10019 分钟前
AI网关能做语义缓存吗?MAI Gateway(魔芋企业级AI网关)实战能力深度解读
java·后端·spring
weixin1997010801621 分钟前
《1688消息服务落地方案:alibaba.message.* 与 Webhook 回调的可靠性与重试策略》(附Python源码)
开发语言·python
天空鸟_时光不老26 分钟前
13-亮点提炼:把技术说辞翻译成业务价值
java·spring boot·spring·spring cloud·mybatis
小蒜学长30 分钟前
基于SpringBoot+Vue的租房管理系统的设计与实现(代码+数据库+LW)
java·数据库·spring boot·后端·租房管理
ZHOUPUYU30 分钟前
PHP 9.0 前瞻:下一代 PHP 会带来哪些新功能?
android·开发语言·php
某不知名網友31 分钟前
ROS2 核心通信:话题发布与订阅详解
开发语言·c++
C++ 老炮儿的技术栈32 分钟前
char (*csConnectName)[256]; 和 char csConnectName [256] 有什么区别
java·c语言·开发语言·c++·人工智能·算法·c