[六字真言]2.嘛.异常定制和通用.md
幻世当空 恩怨休怀
舍悟离迷 六尘不改
且怒且悲且狂哉!
最近一直在循环的一首歌!
丰富自己,比取悦他人更有力量。种下梧桐树,引得凤凰来。你若盛开,蝴蝶自来!
言归正传! 言归正传!
不要去大包大揽
人懒就是动力,我上课的时候为了图省事,经常利用 Exception 捕捉所有潜在的异常这里更正一下,这样的思想不对的,人的能力和经历是有限的,不要让他成为万能的!
publicvoid update(User user){try{// 假设场景//…抛出 IOException 的代码调用//…抛出 SQLException 的代码调用}catch(Exception e){//这里利用基类 Exception 捕捉的所有潜在的异常,如果多个层次这样捕捉,会丢失原始异常的有效信息thrownewRuntimeException("Exception in com.shxt.UserDao.update异常", e);}}
建议重构代码为:
publicvoid update(User user){try{// 假设场景//…抛出 IOException 的代码调用//…抛出 SQLException 的代码调用}catch(IOException e){//仅仅捕捉 IOExceptionthrownewRuntimeException(/*指定这里 IOException 对应的错误代码*/code,"Exception in update", e);}catch(SQLException e){//仅仅捕捉 SQLExceptionthrownewRuntimeException(/*指定这里 SQLException 对应的错误代码*/code,"Exception in update", e);}}
我懒,我就要大包大揽
人懒,就是动力,胖哥就是这样!
假设我们现在做的业务中,需要在一个方法抛出的异常有如下的种类
登录异常/密码异常/角色异常/账号异常/访问异常等等
publicvoid update(User user){try{// 假设场景//…抛出 登录异常 的代码调用//…抛出 密码异常 的代码调用//…抛出 角色异常 的代码调用//…抛出 访问异常 的代码调用}catch(登录异常 ex){thrownewRuntimeException(“Exception in update”, ex);}catch(密码异常 ex){thrownewRuntimeException(“Exception in update”, ex);}catch(角色异常 ex){thrownewRuntimeException(“Exception in update”, ex);}catch(访问异常 ex){thrownewRuntimeException(“Exception in update”, ex);}}
晕了,这么多代码,疯掉了吗?念一下六字真言'打赏啊!打赏啊!'
如果你是一个比较执着的人,也比较喜欢这种方式的人,那么胖哥下面要说的就不要看了!不然就迷糊了!(^__^) 嘻嘻……
代码重构
publicvoid update(User user){try{// 假设场景//…抛出 登录异常 的代码调用//…抛出 密码异常 的代码调用//…抛出 角色异常 的代码调用//…抛出 访问异常 的代码调用}catch(Exception e){thrownewRuntimeException(“Exception in com.shxt.UserDao.update异常”, e);}}
一如既往的将 Exception 转换成 RuntimeException,但是这里的 e 其实是 RuntimeException 的实例,已经在前端代码中封装过
靠,玩死我算了!这样下去可没有朋友啊!不就是又改回来了吗?
解决办法:
- 可以在 RuntimeException 类中添加相关的检查,确认参数 Throwable 不是 RuntimeException 的实例。如是,将拷贝相应的属性到新建的实例上。
- 用不同的 catch 语句块捕捉 RuntimeException 和其它的 Exception。
世界之大无奇不有,心中默念六字真言:"打赏啊!打赏啊!"
[六字真言]2.嘛.异常定制和通用.md的更多相关文章
- [六字真言]6.吽.SpringMVC中上传大小异常填坑
最近在讲课的时候,遇到了关于上传文件过大的时候浏览器无法响应的问题,配置了捕获异常,有的学生浏览器好使,有的学生浏览器不好用!莫名其妙! MaxUploadSizeExceededException进 ...
- [六字真言]4.叭.SpringMVC异常痛苦
"叭",除畜生道劳役之苦: 在学过的三阶段的时候,我们对SpringMVC的异常处理,一直可以算是简单中透着暴力,不要不重视异常!真的很重要,不要让它处在尴尬的位置! 在二阶段或者 ...
- [六字真言]5.咪.功力不足,学习前端JavaScript异常
A Guide to Proper Error Handling in JavaScript 这是关于JavaScript中异常处理的故事.如果你相信 墨菲定律 ,那么任何事情都可能出错,不,一定会出 ...
- 七字真言解读TCP三次握手
三次握手所谓的"三次握手"即对每次发送的数据量是怎样跟踪进行协商使的发送和接收同步,根据所接收到的数据量而确定的数据确认数及数据发送.接收完毕后何时撤消联系,并建立虚连接. 一.七 ...
- Java多线程核心技术(六)线程组与线程异常
本文应注重掌握如下知识点: 线程组的使用 如何切换线程状态 SimpleDataFormat 类与多线程的解决办法 如何处理线程的异常 1.线程的状态 线程对象在不同运行时期有不同的状态,状态信息就处 ...
- 六. 异常处理7.throw:异常的抛出
到目前为止,你只是获取了被Java运行时系统抛出的异常.然而,程序可以用throw语句抛出明确的异常.Throw语句的通常形式如下: throw ThrowableInstance;这里,Thr ...
- ElasticSearch(二十六)修改分词器及定制自己的分词器
1.默认的分词器 standard 分词器 standard tokenizer:以单词边界进行切分standard token filter:什么都不做lowercase token filter: ...
- java 基本语法(十三) 数组(六)数组的常见异常
1.数组角标越界异常:ArrayIndexOutOfBoundsException int[] arr = new int[]{1,2,3,4,5}; // for(int i = 0;i <= ...
- 异常 Exception 知识点总结 MD
Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...
随机推荐
- 记一次 java 连接 linux ssh服务 权限验证失败的原因和解决过程
下面的问题我是通过之前的ssh测试类找出原因的,因为我的测试类跑通了,但是程序跑不通,看了一下源码发现还有一处没有进行解密,所以才会权限验证失败. // 出现权限验证失败的原因就在这里,因为老板要求对 ...
- linux下如何解除被占用的端口号
在本例中,假设8080端口被占用. 1.查看8080端口是否被占用: netstat -anp | grep 8080输出结果:tcp 0 0 :::8080 ...
- python编码你需要知道的编码风格
此时你已经可以写一些更长更复杂的 Python 程序,是时候讨论一下 编码风格 了.大多数语言可以写(或者更明白的说, 格式化 )作几种不同的风格.有些比其它的更好读.让你的代码对别人更易读是个好想法 ...
- Flask学习-Flask基础之WSGI
一.WSGI为什么会出现? 在学习一个东西之前,我们肯定想知道:它为什么会出现?那么,WSGI为什么会出现呢? 我们知道,部署一个web应用,经常需要使用nginx.apache或者IIS等web服务 ...
- kubernetes 集群新增node 节点并将应用分配到新增节点
第一章 1.重新安装一台kubernetes node节点,新增节点:192.168.1.192 网址:https://www.cnblogs.com/zoulixiang/p/9504324.htm ...
- Nginx 配置高可用
阅读本文需要安装Nginx 一 什么是高可用 nginx作为负载均衡服务器 所有请求都到了nginx 可见nginx处于非常重要的位置 如果nginx服务器宕机 后端web服务器将无法提供服务 影响严 ...
- 20135202闫佳歆--week4 两种方式使用同一个系统调用--实验及总结
实验四 使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用 在这里我选择的是第20号系统调用,getpid. 1.使用库函数API: 代码如下: /* getpid.c */ #incl ...
- Linux内核分析-构造一个简单的Linux系统MenuOS
构造一个简单的Linux系统MenuOS linux内核目录结构 arch目录包括了所有和体系结构相关的核心代码.它下面的每一个子目录都代表一种Linux支持的体系结构,例如i386就是Intel C ...
- “数学口袋精灵”第二个Sprint计划(第四天)
“数学口袋精灵”第二个Sprint计划----第四天进度 任务分配: 冯美欣:欢迎界面的背景音乐完善 吴舒婷:游戏界面的动作条,选择答案后的音效 林欢雯:代码算法设计 进度: 冯美欣:欢迎界面背景 ...
- 软工结对项目之词频统计update
队友 胡展瑞 031602215 作业页面 GitHub 具体分工 111500206 赵畅:负责WordCount的升级,添加新的命令行参数支持(自定义输入输出文件,权重词频统计,词组统计等所有新功 ...