Java中编译期异常和运行期异常的区别

news/2025/2/22 16:53:15/文章来源:https://www.cnblogs.com/Tomorrowland/p/18731022

在Java中,异常分为运行期异常(Runtime Exception)编译期异常(Checked Exception),两者的核心区别在于 编译器是否强制要求处理。以下是它们的详细对比:


1. 定义与分类

类别 运行期异常(Runtime Exception) 编译期异常(Checked Exception)
继承关系 继承自 RuntimeException(属于Unchecked Exception) 直接继承自 Exception(但不继承RuntimeException)
处理要求 不强制处理(编译器不检查) 必须显式处理(捕获或抛出,否则编译报错)
设计意图 表示程序逻辑错误或不可控的运行时问题(如空指针、数组越界) 表示可预见的、需要程序主动处理的异常(如文件不存在、网络中断)

2. 常见示例

运行期异常 编译期异常
NullPointerException IOException
ArrayIndexOutOfBoundsException SQLException
ClassCastException FileNotFoundException
ArithmeticException(除零错误) InterruptedException

3. 处理方式对比

(1) 运行期异常(Runtime Exception)

  • 无需强制处理,但建议在代码中主动避免或捕获。
  • 如果未处理,异常会向上传播,最终导致程序崩溃。
  • 典型场景
    // 示例:可能抛出NullPointerException
    String str = null;
    System.out.println(str.length()); // 运行时抛出异常
    

(2) 编译期异常(Checked Exception)

  • 必须显式处理(否则编译失败)。

  • 两种处理方式

    • 捕获异常try-catch
    • 声明抛出throws
    // 示例:必须处理IOException(编译期检查)
    public void readFile() throws IOException { // 方式1:声明抛出FileReader file = new FileReader("test.txt");
    }// 或
    public void readFile() {try {FileReader file = new FileReader("test.txt");} catch (IOException e) { // 方式2:捕获处理e.printStackTrace();}
    }
    

4. 核心区别总结

对比维度 运行期异常 编译期异常
处理强制力 不强制处理(程序员自行决定是否处理) 必须处理(否则编译失败)
错误类型 程序逻辑错误或不可控的运行时问题 外部依赖导致的、可预见的异常
代码健壮性 依赖程序员主动预防(如判空、校验参数) 强制程序员处理潜在问题
典型修复方式 通过代码逻辑修复(如避免空指针、数组越界) 通过异常处理或资源管理(如重试、关闭连接)

5. 为什么这样设计?

  • 运行期异常
    通常由程序逻辑错误引起(如空指针、除零错误),属于开发者应主动避免的问题。编译器不强制处理,避免代码冗余。

  • 编译期异常
    表示程序依赖的外部环境可能发生的问题(如文件不存在、网络中断)。强制处理是为了让开发者明确应对这些可预见的异常,提升代码可靠性。


6. 实际开发中的建议

  1. 运行期异常

    • 通过代码逻辑避免(如判空、校验数组索引)。
    • 在关键位置捕获处理(如框架层统一处理)。
  2. 编译期异常

    • 优先明确处理(如重试文件读取)。
    • 如果无法处理,可向上抛出并记录日志。
  3. 自定义异常

    • 业务错误通常定义为RuntimeException(避免强制调用方处理)。
    • 需要调用方主动处理的异常定义为Checked Exception

一句话总结

  • 运行期异常:程序员的锅,编译器不强制背锅。
  • 编译期异常: 调用方的锅,编译器要求必须背锅!-

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/888056.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

为 Power Automate 注册 Adobe PDF Services

前言最近,再测试如何将HTML转换成PDF,然后发现Adobe有一个免费的操作可以用,好开心,赶紧注册一下。正文1.先注册一个账号,然后登录到Adobe Developer注册链接:https://www.adobe.com/go/getstarted_powerautomate2.这就是新建好的,然后密码要获取一下,如下图:3.然后,…

记一次golang项目context引发的进程OOM故障

之前写过一篇一种基于etcd实践节点自动故障转移的思路, 程序经历过一次线上进程内存持续上涨终OOOM的小事故, 本次技术复盘导致本次内存泄露的完整起因。 提炼代码: 业务函数etcdWatchLoop: 基于etcd的Watch机制持续监听/foo前缀键值对的变更; 收到Watch信道的变更消息,就…

记一次golang项目context引发的OOM故障

之前写过一篇一种基于etcd实践节点自动故障转移的思路, 程序经历过一次线上进程内存持续上涨终OOOM的小事故, 本次技术复盘导致本次内存泄露的完整起因。 提炼代码: 业务函数etcdWatchLoop: 基于etcd的Watch机制持续监听/foo前缀键值对的变更; 收到Watch信道的变更消息,就…

R语言LCMM多维度潜在类别模型流行病学研究:LCA、MM方法分析纵向数据

全文代码数据:https://tecdat.cn/?p=39710 原文出处:拓端数据部落公众号 在数据分析领域,当我们面对一组数据时,通常会有已知的分组情况,比如不同的治疗组、性别组或种族组等。然而,数据中还可能存在未被观测到的分组,例如素食者与非素食者、经常锻炼者与不锻炼者,或…

TensorFlow域对抗训练DANN神经网络分析MNIST与Blobs数据集梯度反转层提升目标域适应能力可视化

全文链接:https://tecdat.cn/?p=39656 原文出处:拓端数据部落公众号 本文围绕基于TensorFlow实现的神经网络对抗训练域适应方法展开研究。详细介绍了梯度反转层的原理与实现,通过MNIST和Blobs等数据集进行实验,对比了不同训练方式(仅源域训练、域对抗训练等)下的分类性能…

【专题】2025年我国机器人产业发展形势展望:人形机器人量产及商业化关键挑战报告汇总PDF洞察(附原数据表)

原文链接:https://tecdat.cn/?p=39668 机器人已广泛融入我们生活的方方面面。在工业领域,它们宛如不知疲倦的工匠,精准地完成打磨、焊接等精细工作,极大提升了生产效率和产品质量;在日常生活里,它们是贴心的助手,扫地机器人默默清扫房间,陪伴机器人给予老人孩子温暖陪…

vba主动着色

原来的条件格式效率太低,改为主动方式着色 Sub SetColor() On Error Resume Next Dim hang As Integer 行数 Dim lie As Integer Dim IsBuy As Boolean Dim IsSell As Boolean hang = ActiveSheet.UsedRange.Rows.Count With ActiveSheet …

2025省选模拟13

2025省选模拟13\(T1\) P1025. Easy Problem \(40pts\)部分分\(40pts\)设 \(f_{i,j}\) 表示 \(p_{3j}=i\) 时 \([1,i]\) 对答案的贡献,状态转移方程为 \(f_{i,j}=\max\limits_{k=3(j-1)}^{i-3} \{ f_{k,j-1}+w(k+1,i) \}\) ,其中 \(w(k+1,i)\) 表示 \([k+1,i]\) 的次大值。 设…

installerX还你一个清爽的安装

相信大家都有被手机自带的软件安装器折磨的情况,各种禁止安装,这种验证和识别,不开启安全模式和开了没区别,针对这种情况有没有什么办法绕过呢? 我们可以使用开源软件installerX,这款软件使用拥有这类原生的安装体验,安装速度也不差,并且简洁高效,还可以进行降级安装。…

[Paper Writting] 论文画图指南

目录Motivation方法概念图新老对比类方法简图类实物示意图效果示意图Architecture Motivation 方法概念图 HPT新老对比类 OSXMOTRUniADMulti-modal 3D Human Pose Estimation方法简图类 MoCoconformerBEVFormerDETRDriveVLM实物示意图 emg2pose效果示意图 umetracktransmvshoid…

不到24小时,AOne让全员用上DeepSeek的秘诀是……

DeepSeek引发新一轮AI浪潮,面对企业数字化智能升级与数据安全红线的急迫需求,IT负责人的压力山大!如何在24小时内实现全员AI落地,同时为后续安全部署铺平道路?Step1:一键开启全员智能时代 基于国产大模型领军者DeepSeek(671B满血版&70B版),天翼云AOne搭载智能引擎…

Unity Addresable打包总结第一弹

前言 使用AB包很久了,一直没有机会做一个系统的总结,趁现在准备离职,时间空闲比较多,将项目内的Addresable使用经验大致的分析总结一下,以作日后备用。 使用介绍 下方的引用链接中,发哥已经总结的很详细了,但我这里还是稍微介绍一下基本流程。 基本流程在Package Manage…