众所周知,在程序运行出现异常的时候,我们可以选择抛出异常或者返回错误码的方式来进行处理,那么他们两个之间有什么区别?各有什么优缺点?在什么情况下选择抛异常,什么情况下选择返回码呢?下面我们来逐步分析。

1.抛异常 VS 错误码

首先,我们来分析一下抛异常和错误码相比的优缺点:
优点:
1.代码可读性高:在异常处理代码的try...catch...finally逻辑结构中,try是正常处理逻辑代码,catch是针对某种或者某类异常的异常处理代码,finally是资源清理代码。如此来看,各个功能的逻辑代码划分分门别类,看起来很清晰,代码可读性比较高
2.可以链式调用或者嵌套调用:在抛异常的处理方式下,可以使用add(sub())这种函数嵌套的调用方式以及add().sub()这种函数链式调用方式。然而如果采用返回错误码这种方式,正确的做法是:对于每个函数的执行,都需要我们首先获取其返回值,然后通过错误码判断函数执行的过程是否出现异常。因此是没办法使用嵌套调用或者链式调用的。
3.异常是无法忽略的。抛出的异常都必须通过catch来处理,也就是说异常是必须处理、无法忽略的。然而没有强制机制要求对错误码强制处理,返回的错误码完全可以被忽略。
4.由于抛出的异常是一个对象,因此在java中,可以采用多态的方式来处理。众所周知,多态的好处可以提高代码的扩展性
缺点:
然而抛出异常的方式在抛异常时,首先需要生成一个异常对象,并且需要维护一个栈用来跟踪异常情况,一直跟踪到我们捕捉到异常并且进行处理后截止,这样其实是比较耗费性能的。所以,与返回错误码相比的缺点就是性能低下。

2.应用场景

上面分析过,抛出异常的方式是比较耗费性能的,然而在程序正常处理、异常没有抛出的情况下,程序性能是不会受到影响的。由于上述所说的抛异常代码可读性高等四个优点,所以当我们觉得程序运行不会出现异常时,优先选择抛异常。如果可以预知程序可能会出错,为了性能考虑,那么则可以选择返回错误码。
那么什么情况是可以预知到程序运行会出现异常,什么情况下是预知程序不会出现异常呢?
可以预知到异常的情况:
1.用户的输入,例如password错误等
可以预知程序不会出现异常:
1.空指针,非法参数等
2.资源错误:内存溢出、stack overflow等

转载于:https://www.cnblogs.com/levy5307/p/9229650.html

错误处理之异常与返回码相关推荐

  1. 微信公众号每次调用接口正确或错误的返回码

    原文连接:https://blog.csdn.net/pansanday/article/details/65448868 -------------------------------------- ...

  2. 微信公众号之错误返回码

    微信公众号之错误返回码 返回码 说明 -1 系统繁忙,此时请开发者稍候再试 0 请求成功 40001 获取 access_token 时 AppSecret 错误,或者 access_token 无效 ...

  3. GetLastError 错误返回码

    (0)-操作成功完成. (1)-功能错误. (2)- 系统找不到指定的文件. (3)-系统找不到指定的路径. (4)-系统无法打开文件. (5)-拒绝访问. (6)-句柄无 效. (7)-存储控制块被 ...

  4. 搭建网站常见返回码40X 50X等错误的原因及解决方案

    大家在搭建网站时经常会遇到各类问题, 其中最常见的就是各类 40X 50X 报错, 这里 简单介绍一下各类报错的意义以及解决方法.在介绍报错前,先简单介绍下 http 协议的常 见返回码,这些返回码可 ...

  5. java中web错误返回码,关于在java程序里调用webservice报500返回码的有关问题

    关于在java程序里调用webservice报500返回码的问题 我现在写了个程序,是调用webservice的,执行后我打印返回码是500  错误信息是 java.io.IOException: S ...

  6. 华为运维客户端SeoClient接收返回码错误

    问题描述:华为防火墙客户端SeoClient客户端接收返回码错误,导致无法连上. 之前还能一直使用,电脑重启之后突然就连不上了. 检查原因:最近win10自动升级过补丁,驱动程序强制签名估计又被ban ...

  7. 解决微信返回码为40113,错误信息errmsg:unsupported file type

    解决微信返回码为40113,错误信息"errmsg":"unsupported file type" // PHP代码 $file_name = md5(mic ...

  8. 如何设计API返回码(错误码)?

    前言 客户端请求API,通常需要通过返回码来判断API返回的结果是否符合预期,以及该如何处理返回的内容等. 相信很多同学都吃过返回码定义混乱的亏,有的API用返回码是int类型,有的是string类型 ...

  9. Spring Boot @ControllerAdvice 处理全局异常,返回固定格式Json

    需求 在构建RestFul的今天,我们一般会限定好返回数据的格式比如: { "code": 0,   "data": {},   "msg" ...

  10. html页面源码_整合SpringMVC之错误处理底层原理及源码分析

    一. SpringBoot的默认错误处理策略 1. 对404的默认处理策略 我们在发送请求的时候,如果发生了404异常,SpringBoot是怎么处理的呢? 我们可以随便发送一个不存在的请求来验证一下 ...

最新文章

  1. 修改hosts文件不需要重启的方法
  2. qq邮箱使用技巧学习1
  3. github-share报错无法读取远程仓库
  4. 怎么设置电脑锁屏不断网
  5. SDRAM控制器设计
  6. mysql数据库+ssh框架_SSH框架+Mysql数据库开发java web会员积分消费管理系统
  7. c语言改变doss窗口的颜色,C语言第三次模拟练习题部分解答
  8. 力扣-103. 二叉树的锯齿形层序遍历
  9. 32位有符号整数_(Trivial)LeetCode 8—字符串转化为整数(atoi)
  10. 工业机器人行业应用-新能源汽车
  11. 关于在CSDN中写博客时如何插入图片
  12. mm1排队论编程c语言,完整版MM1排队系统仿真matlab实验报告
  13. AcWing 143. 最大异或对 —— 神奇的二进制
  14. Java+SSM+JSP实现医院预约挂号系统
  15. android10颜色,首款采用10bit屏幕即将发布,你了解色深吗?
  16. 货郎担问题(分支限界法)
  17. MacBook Pro 2018电池鼓包、键盘问题免费换新
  18. [小白向]Python使用request库调用API并获取返回的JSON数据包中的内容
  19. php如何获取json里的值,如何从JSON PHP正确获取值?
  20. 微软等数据结构+算法面试100题 by July

热门文章

  1. matlab中fplot和ezplot,Matlab中plot、fplot、ezplot的使用方法和区别
  2. 小学计算机属于数学与科学吗,我是计算机专业,想考小学信息技术教师资格证没有,那我是报科学还是...
  3. crash fault-tolerant protocols和Byzantine fault-tolerant protocols区别
  4. Hyperledger Fabric教程(4)-- byfn.sh分析-docker-compose-cli.yaml
  5. 区块链 以太坊 智能合约 运行原理和开发实例
  6. layui upload 点击上传没有反应 JS动态加载
  7. 比特币 POW 白皮书 区块篡改成功的概率 代码 注释详解
  8. java echarts 饼图_饼图 | ECharts 数据可视化实验室
  9. 图(一):图的邻接表表示
  10. php案例之后台数据显示-- mysqli面向过程版(procedure oriented programming = POP)