为什么要自定义异常

news2024/9/30 19:10:43

背景

        我们在阅读各类源码时,会注意到几乎各个功能包中,都包含有自定义的异常;那有没有想过,JDK的源码中,已经定义了各种异常体系,为啥后续的一些依赖Jar包中,还要自定义异常呢?

        下面摘取源码中的一些自定义异常:

  • Mybatis的binding包下的绑定异常BindingException(它继承了PersistenceException,然后提供了一些构造方法)

  • Mybatis的Cache包下的缓存异常CacheException(它继承了PersistenceException,然后提供了一些构造方法)​​​​​​

  • Mybatis的dataSource包下的数据源异常DataSourceException

        基于以上Mybatis的源码中,定义的自定义异常,我们发现它针对各种不同的业务场景,定义了不同的异常类,而不是不加区分的使用原生的RuntimeException或者通用父类异常PersistenceException。从上述源码中,可以窥见自定义异常是必要的,那么为什么要自定义异常呢?

为什么需要自定义异常

  • 异常分类

        自定义异常允许你根据错误的类型进行分类。

        例如上述Mybatis的持久化异常,你可以创建一个基础异常类PersistenceException,然后为不同场景类型的持久化错误创建子类BindingException、CacheException、DataSourceException等。

        这样通过不同的子类异常,我们就可以更方便的区分不同的异常场景。

  • 异常处理策略

    自定义异常可以与特定的异常处理策略关联。

        例如,针对异常的不同情况,可能存在不的处理策略:有些立即重试、有些延时重试,有些只记录日志、而其他异常可能需要通知用户。

        所以自定义不同的异常类型,有助于我们更好的实施不同的处理策略。

  • 更明确的信息

        自定义异常,可以传递更加明确的异常信息。还是拿上面的异常来说,假如Mybatis中,上述绑定、缓存、数据源异常,我们统一使用父类的PersistenceException,那它显然没有对应的子类传递的异常信息明确。

        同时自定义异常,我们也可以对原有异常信息,进行扩展丰富,比如如下异常的构造方法中,我们可以在原有的message上追加一些更详细的内容:比如添加前缀信息等(xxx数据源异常:)

        也可以在抛出异常时,根据构造方法,自定义异常信息。

  • 业务流程控制

    结合上述几点,使用自定义异常,可以实现更细粒度的业务流程控制

        使用特定的自定义异常,可以减少在 try-catch 块中误用通用异常的风险。比如在catch捕获Exception 或 PersistenceExceptionBindingException,将支持将异常处理逻辑粒度变得更加明确。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java应用程序的服务器有哪些?

1.Tomcat、Jetty 和 JBoss 区别? Apache Tomcat、Jetty 和 JBoss都是用于部署Java应用程序的服务器,它们都支持Servlet、JSP和其他Java EE(现在称为Jakarta EE)技术。尽管它们有一些相似的功能,但它们之间还是存在一些…

二叉树相关oj题(Java)

一. 检查两颗树是否相同。OJ链接 这里我们考虑两种情况: 1.结构上 2.节点值上 当上面两种情况同时遍历时: 1.如果两颗树的节点都不为空,就判断值 2.如果两棵树种一棵树的节点为空另一棵树的节点不为空,则这两颗肯定不是相同的树 整体来看:要判断两棵树是否相同,得判断根,然后判…

SQLite数据库迁移与备份技术详解

目录 引言 SQLite数据库迁移 迁移概述 迁移步骤 1. 创建目标数据库系统 2. 导出SQLite数据库数据 3. 导入数据到目标数据库 4. 验证数据迁移 迁移注意事项 SQLite数据库定期备份 备份的重要性 备份方法 1. 使用VACUUM命令 2. 使用ATTACH DATABASE和PRAGMA语句 3.…

这些211热度不高,毕业年薪20-40万!自动化考研择校

这些211学校,今年热度不高,就业还意外的好,一定不要错过!搭配历年数据,供大家参考~ 目录 ① 华东理工大学 ② 东华大学 ③ 江南大学 ④ 安徽大学 ① 华东理工大学 复试线招生人数 控制学科等级为B,上…

Qt QIntValidator详解

一、介绍 QIntValidator是Qt框架中用于验证整数输入的验证器类。它可以限制用户输入的整数范围,确保输入的整数在指定的范围内。通过QIntValidator,可以轻松地实现整数输入的有效性和范围限制。 二、 常用方法 QIntValidator(QObject *parent Q_NULLPT…

Python编码系列—Python设计模式的选择与权衡:打造高效代码架构

🌟🌟 欢迎来到我的技术小筑,一个专为技术探索者打造的交流空间。在这里,我们不仅分享代码的智慧,还探讨技术的深度与广度。无论您是资深开发者还是技术新手,这里都有一片属于您的天空。让我们在知识的海洋中…

SigmaStudio中部分滤波器算法有效性频谱分析

一、各类滤波器参数如下图设置 1.1、输入源白噪音经过如下算法处理后Notch\Band Pass\Band Stop,如下频谱分析图 1.2、输入源白噪音经过low pass后处理前后的频谱分析如如下 二、Notch滤波器配置图,如下 2.1、两串联、五个串联和未串联的Notch对白噪音…

券商股大涨,至少17家券商已入局AI人工智能金融大模型

大家好,我是Shelly,一个专注于输出AI工具和科技前沿内容的AI应用教练,体验过300款以上的AI应用工具。关注科技及大模型领域对社会的影响10年。关注我一起驾驭AI工具,拥抱AI时代的到来。 最近,券商股价的大涨成为了财经…

鲜花配送小程序开发制作方案

鲜花配送小程序系统通过用户端、商家端和配送员端的协同工作,确保鲜花能够在指定时间内送达,提升用户满意度和忠诚度。 目标用户 个人消费者:生日、纪念日、节日等特殊场合送花的人群。 企业客户:需要定期为办公场所或活动提供花…

低至1元/小时:国庆七天,30元通关《黑神话:悟空》!

目录 前言 一、云游戏解决方案的引入 二、服务的核心亮点及性价比 1、高清画质体验 2、广泛的手柄支持 3、隐私与安全性 4、直播推流优势 5、游戏快速启动 6、价格优惠 (1)新用户专享,低至1元/时! (2&#…

利用C++优化Chrome浏览器的启动速度

Chrome浏览器是全球使用最广泛的网络浏览器之一,但有时候它的启动速度可能会让人感到不满。为了解决这个问题,我们可以使用C进行一些优化。本文将介绍如何通过关闭预加载功能、设置允许弹出窗口和为网页添加快捷方式来加快Chrome浏览器的启动速度。 &am…

谨防火灾!电瓶车检测算法助力城市/小区/园区多场景安全管理精细化、智能化

随着人工智能技术的快速发展,AI智能分析网关V4在电瓶车检测领域的应用日益广泛。这一技术通过深度学习、计算机视觉等先进算法,实现了对电瓶车及其相关行为的智能识别和分析,为电瓶车的管理和应用提供了强大的技术支持。 一、电瓶车检测算法…

python为姓名注音实战案例

有如下数据,需要对名字注音。 数据样例:👇 一、实现过程 前提条件:由于会用到pypinyin库,所以一定得提前安装。 pip install pypinyin1、详细代码: from pypinyin import pinyin, Style# 输入数据 names…

Unreal 对象、属性同步流程

文章目录 类型同步初始化创建 FObjectReplicator创建 FRepLayout、Cmd、ShadowOffset创建 FRepChangedPropertyTracker、FRepState创建 FReplicationChangelistMgr、FRepChangelistState、ShadowBuffer 属性同步属性变化检测查找变化属性,写入ShadowMemory发送数据 …

如何在Code::Blocks中集成EasyX库?

EasyX库是一个轻量级的C图形库,专为Windows平台设计,适用于图形编程初学者,特别是少儿编程或编程启蒙阶段。使用EasyX库,用户可以在C环境下快速绘制简单的图形、动画等视觉效果。本文将详细介绍如何在Code::Blocks中集成EasyX库&a…

Python兼职接单,30天收益近16.5K,分享详细方法!

写在开篇 随着大数据和人工智能的兴起。各行业对爬虫类和数分类服务的需求量呈指数级的暴增。传统行业受经济下行的影响,近段时间失业找不到工作的朋友,后台咨询技术变现、兼职接单问题也越来越多。 当然也有网友向我发来喜报,告诉我他上半年…

JVM 垃圾回收算法细节

目录 前言 GC Root 可达性分析 根节点枚举 安全点 安全区域 记忆集与卡表 写屏障 并行的可达性分析 前言 学习了几种垃圾收集算法之后, 我们再来看看它们在具体实现上有什么细节之处,我们所能看到的理论很简单,但是实现起来那…

聊一下数据脱敏

背景 随着信息社会高速发展,大家对隐私数据的安全越来越重视,现在市面上各种搜集个人信息的网站,app层出不穷,你也不知道你的信息提交上去后,提供服务的那边,是不是会妥善保管好你的个人数据,包…

Python和MATLAB库尔巴克–莱布勒散度信息论统计学生物学和算法模型

🎯要点 高斯混合模型聚类和t分布随机邻域嵌入底层分析信息论测量复合彩票统计学计算结果离散分布速率最优估计器样本统计相似性快速闭环散度和交叉熵计算催乳素诱导模型贝叶斯快速推理模型视觉皮层活动神经数据分布 Python散度 在数理统计中,库尔巴克…

悬浮提词器免费版,5款便捷软件分享推荐

在这个信息爆炸、内容为王的时代,无论是直播带货、视频创作还是公开演讲,流畅自然的表达都是吸引观众的关键。然而,面对镜头时忘词卡顿却成了不少人的“心头痛”。今天,就给大家揭秘五款完全免费的悬浮提词器软件,它们…