当前位置: 首页 > news >正文

可检查异常与不可检查异常

在Java中,异常分为可检查异常(Checked Exception)不可检查异常(Unchecked Exception),它们的核心区别体现在编译时强制处理机制设计用途上。以下是详细对比:


1. 可检查异常(Checked Exception)

  • 定义
    继承自 Exception 类(但不包括 RuntimeException 及其子类),编译器强制要求处理。

  • 特点

    • 必须显式处理:要么用 try-catch 捕获,要么用 throws 声明抛出,否则编译失败。

    • 代表预期问题:通常是程序外部因素导致的、可预见的错误(如文件不存在、网络中断)。

  • 示例

    // 必须处理IOException(可检查异常)
    try {Files.readString(Path.of("nonexistent.txt"));
    } catch (IOException e) {System.out.println("文件读取失败: " + e.getMessage());
    }
    • 常见可检查异常:IOExceptionSQLExceptionClassNotFoundException


2. 不可检查异常(Unchecked Exception)

  • 定义
    包括 RuntimeException 及其子类,以及 Error 及其子类。编译器不强制处理。

  • 特点

    • 无需显式处理:即使不捕获或声明,代码也能编译通过(但运行时可能崩溃)。

    • 代表程序错误:通常是代码逻辑问题(如空指针、数组越界)或系统级错误(如内存溢出)。

  • 示例

    // 不处理NullPointerException(运行时异常)也能编译
    String str = null;
    System.out.println(str.length()); // 运行时抛出NullPointerException
    • 常见不可检查异常:

      • 运行时异常NullPointerExceptionArrayIndexOutOfBoundsExceptionIllegalArgumentException

      • 错误(Error)OutOfMemoryErrorStackOverflowError(通常无法恢复)。


关键区别总结

特性可检查异常 (Checked)不可检查异常 (Unchecked)
继承关系Exception 的子类(非Runtime)RuntimeException 或 Error 的子类
处理强制力编译器强制要求处理不强制,可选择性处理
常见场景外部依赖问题(如IO、数据库)代码逻辑错误或系统严重故障
是否可恢复通常可恢复逻辑错误可修复;Error通常不可恢复
设计目的提醒开发者处理潜在问题暴露程序缺陷或系统问题

为什么这样设计?

  • 可检查异常:强制开发者关注并处理可能的外部故障,提升健壮性。

  • 不可检查异常:避免琐碎的异常处理干扰代码逻辑(如每个方法都处理NullPointerException会降低可读性)。


实际建议

  • 可检查异常:优先捕获并尝试恢复,或转换为用户友好提示。

  • 不可检查异常:通过代码检查预防(如判空、校验参数),而非盲目捕获。

相关文章:

  • suna工具调用可视化界面实现原理分析(三)
  • 【神经网络、Transformer及模型微调】
  • Windows11下ESP-IDF开发环境搭建【基于Cursor/VS Code插件】
  • 2025-05-06 滑动窗口最大值
  • 逐次逼近式A/D转换器
  • 1、PLC控制面板 - /自动化与控制组件/plc-control-panel
  • AI-02a5a2.神经网络的学习
  • C# 实现PLC数据自动化定时采集与存储(无需界面,自动化运行)
  • 2021-10-31 C++求一个千位和十位数字之和为10,百位个位之积为12的四位数
  • 针对面试-redis篇
  • mybatis 的多表查询
  • 【SpringBoot3】idea找不到log符号
  • 开源与商业:图形化编程工具的博弈与共生
  • 2025年游戏行业DDoS攻防指南:智能防御体系构建与实战策略
  • transformer➕lstm训练回归模型
  • hybird接口
  • 从 MDM 到 Data Fabric:下一代数据架构如何释放 AI 潜能
  • TS 泛型
  • Springboot之maven依赖管理
  • 【Vue】组件自定义事件 TodoList 自定义事件数据传输
  • 竞彩湃|巴萨客场淘汰国际米兰,巴黎双杀阿森纳
  • 习近平同欧洲理事会主席科斯塔、欧盟委员会主席冯德莱恩就中欧建交50周年互致贺电
  • 央视热评:从银幕到生活,好故事如何“撬动”大市场
  • 辽宁召开假期安全生产工作调度会:绝不允许层层失守,绝不允许“带病运行”
  • 长三角铁路今日预计发送旅客398万人次,客流持续保持高位运行
  • 遭反特朗普情绪拖累?澳大利亚联盟党大选落败、党魁痛失议席