幻世当空 恩怨休怀
舍悟离迷 六尘不改
且怒且悲且狂哉!

最近一直在循环的一首歌!

丰富自己,比取悦他人更有力量。种下梧桐树,引得凤凰来。你若盛开,蝴蝶自来!

言归正传! 言归正传!

不要去大包大揽

人懒就是动力,我上课的时候为了图省事,经常利用 Exception 捕捉所有潜在的异常这里更正一下,这样的思想不对的,人的能力和经历是有限的,不要让他成为万能的!

  1. publicvoid update(User user){
  2. try{
  3. // 假设场景
  4. //…抛出 IOException 的代码调用
  5. //…抛出 SQLException 的代码调用
  6. }catch(Exception e){
  7. //这里利用基类 Exception 捕捉的所有潜在的异常,如果多个层次这样捕捉,会丢失原始异常的有效信息
  8. thrownewRuntimeException("Exception in com.shxt.UserDao.update异常", e);
  9. }
  10. }

建议重构代码为:

  1. publicvoid update(User user){
  2. try{
  3. // 假设场景
  4. //…抛出 IOException 的代码调用
  5. //…抛出 SQLException 的代码调用
  6. }catch(IOException e){
  7. //仅仅捕捉 IOException
  8. thrownewRuntimeException(/*指定这里 IOException 对应的错误代码*/code,"Exception in update", e);
  9. }catch(SQLException e){
  10. //仅仅捕捉 SQLException
  11. thrownewRuntimeException(/*指定这里 SQLException 对应的错误代码*/code,"Exception in update", e);
  12. }
  13. }

我懒,我就要大包大揽

人懒,就是动力,胖哥就是这样!
假设我们现在做的业务中,需要在一个方法抛出的异常有如下的种类
登录异常/密码异常/角色异常/账号异常/访问异常等等

  1. publicvoid update(User user){
  2. try{
  3. // 假设场景
  4. //…抛出 登录异常 的代码调用
  5. //…抛出 密码异常 的代码调用
  6. //…抛出 角色异常 的代码调用
  7. //…抛出 访问异常 的代码调用
  8. }catch(登录异常 ex){
  9. thrownewRuntimeException(“Exception in update”, ex);
  10. }catch(密码异常 ex){
  11. thrownewRuntimeException(“Exception in update”, ex);
  12. }catch(角色异常 ex){
  13. thrownewRuntimeException(“Exception in update”, ex);
  14. }catch(访问异常 ex){
  15. thrownewRuntimeException(“Exception in update”, ex);
  16. }
  17. }

晕了,这么多代码,疯掉了吗?念一下六字真言'打赏啊!打赏啊!'

如果你是一个比较执着的人,也比较喜欢这种方式的人,那么胖哥下面要说的就不要看了!不然就迷糊了!(^__^) 嘻嘻……

代码重构

  1. publicvoid update(User user){
  2. try{
  3. // 假设场景
  4. //…抛出 登录异常 的代码调用
  5. //…抛出 密码异常 的代码调用
  6. //…抛出 角色异常 的代码调用
  7. //…抛出 访问异常 的代码调用
  8. }catch(Exception e){
  9. thrownewRuntimeException(“Exception in com.shxt.UserDao.update异常”, e);
  10. }
  11. }

一如既往的将 Exception 转换成 RuntimeException,但是这里的 e 其实是 RuntimeException 的实例,已经在前端代码中封装过

靠,玩死我算了!这样下去可没有朋友啊!不就是又改回来了吗?

解决办法:

  1. 可以在 RuntimeException 类中添加相关的检查,确认参数 Throwable 不是 RuntimeException 的实例。如是,将拷贝相应的属性到新建的实例上。
  2. 用不同的 catch 语句块捕捉 RuntimeException 和其它的 Exception。

世界之大无奇不有,心中默念六字真言:"打赏啊!打赏啊!"

[六字真言]2.嘛.异常定制和通用.md的更多相关文章

  1. [六字真言]6.吽.SpringMVC中上传大小异常填坑

    最近在讲课的时候,遇到了关于上传文件过大的时候浏览器无法响应的问题,配置了捕获异常,有的学生浏览器好使,有的学生浏览器不好用!莫名其妙! MaxUploadSizeExceededException进 ...

  2. [六字真言]4.叭.SpringMVC异常痛苦

    "叭",除畜生道劳役之苦: 在学过的三阶段的时候,我们对SpringMVC的异常处理,一直可以算是简单中透着暴力,不要不重视异常!真的很重要,不要让它处在尴尬的位置! 在二阶段或者 ...

  3. [六字真言]5.咪.功力不足,学习前端JavaScript异常

    A Guide to Proper Error Handling in JavaScript 这是关于JavaScript中异常处理的故事.如果你相信 墨菲定律 ,那么任何事情都可能出错,不,一定会出 ...

  4. 七字真言解读TCP三次握手

    三次握手所谓的"三次握手"即对每次发送的数据量是怎样跟踪进行协商使的发送和接收同步,根据所接收到的数据量而确定的数据确认数及数据发送.接收完毕后何时撤消联系,并建立虚连接. 一.七 ...

  5. Java多线程核心技术(六)线程组与线程异常

    本文应注重掌握如下知识点: 线程组的使用 如何切换线程状态 SimpleDataFormat 类与多线程的解决办法 如何处理线程的异常 1.线程的状态 线程对象在不同运行时期有不同的状态,状态信息就处 ...

  6. 六. 异常处理7.throw:异常的抛出

    到目前为止,你只是获取了被Java运行时系统抛出的异常.然而,程序可以用throw语句抛出明确的异常.Throw语句的通常形式如下:    throw ThrowableInstance;这里,Thr ...

  7. ElasticSearch(二十六)修改分词器及定制自己的分词器

    1.默认的分词器 standard 分词器 standard tokenizer:以单词边界进行切分standard token filter:什么都不做lowercase token filter: ...

  8. java 基本语法(十三) 数组(六)数组的常见异常

    1.数组角标越界异常:ArrayIndexOutOfBoundsException int[] arr = new int[]{1,2,3,4,5}; // for(int i = 0;i <= ...

  9. 异常 Exception 知识点总结 MD

    Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...

随机推荐

  1. 记一次 java 连接 linux ssh服务 权限验证失败的原因和解决过程

    下面的问题我是通过之前的ssh测试类找出原因的,因为我的测试类跑通了,但是程序跑不通,看了一下源码发现还有一处没有进行解密,所以才会权限验证失败. // 出现权限验证失败的原因就在这里,因为老板要求对 ...

  2. linux下如何解除被占用的端口号

    在本例中,假设8080端口被占用. 1.查看8080端口是否被占用: netstat -anp | grep 8080输出结果:tcp        0      0 :::8080         ...

  3. python编码你需要知道的编码风格

    此时你已经可以写一些更长更复杂的 Python 程序,是时候讨论一下 编码风格 了.大多数语言可以写(或者更明白的说, 格式化 )作几种不同的风格.有些比其它的更好读.让你的代码对别人更易读是个好想法 ...

  4. Flask学习-Flask基础之WSGI

    一.WSGI为什么会出现? 在学习一个东西之前,我们肯定想知道:它为什么会出现?那么,WSGI为什么会出现呢? 我们知道,部署一个web应用,经常需要使用nginx.apache或者IIS等web服务 ...

  5. kubernetes 集群新增node 节点并将应用分配到新增节点

    第一章 1.重新安装一台kubernetes node节点,新增节点:192.168.1.192 网址:https://www.cnblogs.com/zoulixiang/p/9504324.htm ...

  6. Nginx 配置高可用

    阅读本文需要安装Nginx 一 什么是高可用 nginx作为负载均衡服务器 所有请求都到了nginx 可见nginx处于非常重要的位置 如果nginx服务器宕机 后端web服务器将无法提供服务 影响严 ...

  7. 20135202闫佳歆--week4 两种方式使用同一个系统调用--实验及总结

    实验四 使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用 在这里我选择的是第20号系统调用,getpid. 1.使用库函数API: 代码如下: /* getpid.c */ #incl ...

  8. Linux内核分析-构造一个简单的Linux系统MenuOS

    构造一个简单的Linux系统MenuOS linux内核目录结构 arch目录包括了所有和体系结构相关的核心代码.它下面的每一个子目录都代表一种Linux支持的体系结构,例如i386就是Intel C ...

  9. “数学口袋精灵”第二个Sprint计划(第四天)

    “数学口袋精灵”第二个Sprint计划----第四天进度 任务分配: 冯美欣:欢迎界面的背景音乐完善 吴舒婷:游戏界面的动作条,选择答案后的音效 林欢雯:代码算法设计 进度:   冯美欣:欢迎界面背景 ...

  10. 软工结对项目之词频统计update

    队友 胡展瑞 031602215 作业页面 GitHub 具体分工 111500206 赵畅:负责WordCount的升级,添加新的命令行参数支持(自定义输入输出文件,权重词频统计,词组统计等所有新功 ...