最近公司内要搞一个平台,内部涉及到自动化运维的一部分,趁着十一这两天玩过回来在学习expect,看tcl一章异常处理的时候,突然想到个问题,异常合理处理方式的问题。

异常合理从技术上分2种处理方式。

1、抛exception的方式;

2、返回值判断的方式;

其实任何系统中,都不可能只用一种处理方式,不然这个就过犹不及的,总结了一下比较合理的方式。

返回值判断的方式比较适合于正常逻辑的一部分,哪怕对于某个业务功能来说,它可能影响很大,比如文件不完整,账户不存在,密码不正确,金额为负数等。

抛异常则适合于出错了有可能无法继续往下运行的场景,比如配置文件不存在,数据库连接不上,网络断开。此时调用者必须仔细思考是否捕获异常,清一色往上抛是不负责的做法。

除此之外,有可能会出现的情况就是一个程序中有可能会抛出七八种异常,这个时候,如果都通过抛出异常的方式让外部捕获,这个实现就比较差了,而且并不一定所有的异常都是不可修复的。

还有很重要的一点,对于可能返回null的场景,内部没有检查是否为null,而是依赖于运行时的NullPointerException总觉得不是一种特别合理的方式。因为NullPointerException是个继承于RuntimeException,这使得异常捕获是可选的。真到运行时抛出很可能会导致业务中止而不一致。对于这个null,更合理的做法应该是对于逻辑已知有可能为null而导致外部调用者使用null返回值可能会异常的(比如DES/base64加解密),或许更好的方式是抛出一个包装的受检异常,强行要求外部调用者捕获,而不是外部调用者判断返回值是否为null(应用开发者很有可能是不会去看源码的),这可能是更好的方式。对于非open source程序,在自定义的受检异常上包装自定义的错误代码这会更加的清晰。

关于异常的合理处理方式相关推荐

  1. 业务异常 java_谈谈RxJava处理业务异常的几种方式

    此文介绍了RxJava处理业务异常的几种方式,分享给大伙.具体如下: 关于异常 Java的异常可以分为两种:运行时异常和检查性异常. 运行时异常: RuntimeException类及其子类都被称为运 ...

  2. C++异常机制的实现方式和开销分析(作者:白杨)

    C++异常机制的实现方式和开销分析 白杨 http://baiy.cn 在我几年前开始写<C++编码规范与指导>一文时,就已经规划着要加入这样一篇讨论 C++ 异常机制的文章了.没想到时隔 ...

  3. 业务异常 java_浅谈RxJava处理业务异常的几种方式

    本文介绍了RxJava处理业务异常的几种方式,分享给大家.具体如下: 关于异常 Java的异常可以分为两种:运行时异常和检查性异常. 运行时异常: RuntimeException类及其子类都被称为运 ...

  4. 什么异常,在程序中为什么抛异常?抛异常的几中方式

    一.什么是异常 在程序运行中/生活过程中,所发生的不正常的/不符合预期的情况(意外),这就是异常,它会导致程序的中断或者过程的结束. 二.为什么抛异常 如果不抛异常,当发生错误时整个程序可能会全部终止 ...

  5. Spring MVC 处理异常的3种方式

    三种方式 @ExceptionHandler标注的方法被定义为处理指定类型异常: @ResponseStatus标注的方法执行,会修改响应头中的状态码: Spring会把@ControllerAdvi ...

  6. junit 5测试异常处理_在JUnit中处理异常的3种方式。 选择哪一个?

    junit 5测试异常处理 在JUnit中,有3种流行的方式来处理测试代码中的异常: 试捕习语 使用JUnit规则 带注解 我们应该使用哪一个?何时使用? 试捕习语 这个习语是最受欢迎的习语之一,因为 ...

  7. 异常体系【处理方式:声明异常、捕获异常】

    1.异常 异常的概述:在java代码或编译或者运行的过程中出现了不能编译或运行结果受影响的情况都属于异常 使用:类对象抛出一个异常类的对象,对象中包含了该异常的产生原因.位置.类型.具体描述.等具体的 ...

  8. 阿里的nacos+springboot+dubbo2.7.3集成以及统一处理异常的两种方式

    在网上很多关于dubbo异常统一处理的博文,90%都是抄来抄去.大多都是先上一段dubbo中对于异常的统一处理的原码,然后说一堆的(甚至有12345,五种)不靠谱方案,最后再说"本篇使用的是 ...

  9. UncaughtExceptionHandler:java未捕获的异常/错误默认处理方式

    UncaughtExceptionHandler:java未捕获的异常/错误 @(JAVA)[java] java有一部分异常属于运行时异常,这类异常发生时通过会导致程序发生错误,导致退出.如数据下标 ...

最新文章

  1. [Step By Step]如何在SAP Business Object Data Services中连接到SAP HANA 数据库
  2. 自建ES迁移至阿里云ES(使用脚本及logstash同步)
  3. hdu4022 map+multiset
  4. 讲几种Python包的安装方式
  5. bootstrp-table 获取checkbox选中行的数据id
  6. 重置系统_开课了,如何重置电脑系统?1分钟教会你!
  7. 24.两两交换链表中的节点
  8. string 转换int
  9. spring中redistemplate不能用通配符keys查出相应Key的问题
  10. Matlab读取音频文件并进行分析
  11. 15个网页数据采集中最常遇到的问题(干货)
  12. python超链接格式_用Python在本地文件夹中插入超链接
  13. Android通过百度api地址经纬度获取文字位置信息
  14. 前端接收java后端返回base64二进制流下载mp4
  15. oracle odi 配置安装,ODI的安装和配置
  16. 月结6 - AR和AP重分类(Regroup)[FAGLF101/OBBU/OBBV]
  17. 翻译(5): 技术债务墻:一种让技术债务可见并可协商的方法
  18. 性能测试工具kylinPET的国产化道路
  19. 节日贺卡使用python编写
  20. 初识react(13)—— 使用 moment 来获取日期

热门文章

  1. Mysql插入中文的字段内容时乱码的解决方法
  2. okhttp3 ExceptionInInitializerError 异常处理
  3. selenium:解决页面元素display:none的方法
  4. 【亲测有效】Ubuntu18.04 sudo apt update无法解析域名的解决方案
  5. 如何从派生类函数调用父类函数?
  6. “ this”关键字如何工作?
  7. ros中订阅/map话题,获取地图尺寸,获取机器人原点origin,获取地图分辨率resolution (c++,python,waitForMessage,wait_for_message)
  8. Spring的Bean属性依赖注入
  9. ❤️稀疏数组的建立与还原(建议收藏)❤️
  10. HTML5新增表单属性(HTML5)