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

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

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

言归正传! 言归正传!

不要去大包大揽

人懒就是动力,我上课的时候为了图省事,经常利用 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. LOJ#6503.「雅礼集训 2018 Day4」Magic[容斥+NTT+启发式合并]

    题意 \(n\) 张卡牌 \(m\) 种颜色,询问有多少种本质不同的序列满足相邻颜色相同的位置数量等于 \(k\). 分析 首先本质不同不好直接处理,可以将同种颜色的卡牌看作是不相同的,求出答案后除以 ...

  2. NServiceBus VS MassTransit 从 stackoverflow.com 翻译而来,希望对这两个技术比较关心的同学有帮助

    近段时间在看SOA,在国外网站有很多资料可以查看,本来在中文网站中找到一片关于这两个框架的对比介绍的可惜笔者没有认真翻译,只有花点时间自己翻译了一个版本,希望对技术界的朋友有所帮助. 我正纠结于NSe ...

  3. 使用顽灯浏览器执行H5游戏辅助挂机

    前一篇<使用Fidder从安卓模拟器获取APP内H5游戏网址>我们获取到了APP内H5游戏的网址,那么接下来我们使用辅助工具做一些日常任务,如:每天晚上20点做副本,定时喊话,自动清理包裹 ...

  4. PHP学习笔记2

    PHP Switch语句 用于根据多个不同条件执行不同动作.如果不在每个条件后加break,将会输出所有结果. <?php $language="java"; switch( ...

  5. Linux内核分析(第二周)

    操作系统是如何工作的? 一.总结:三大法宝 1.存储程序计算机 + 函数调用堆栈 + 中断机制 2.堆栈:C语言程序运行时候必须的一个记录调用路径和参数的空间(函数调用框架/提供局部变量/传递参数/保 ...

  6. Java中的基本数据据类型

    1.整数类型 类型 字节数 表示范围 byte 1 -128~127 short 2 -32768 ~ 32767 int 4 -2147483648~2147483647 long 8 -92233 ...

  7. Git学习笔记 --第一章

    本系列学习笔记参考廖雪峰Git教程 安装Git Linux平台 Ubuntu/Debian命令:sudo apt-get install git 其他版本  Git官网下载源码,然后解压,依次输入:. ...

  8. Beta吐槽

    目录 感想 管理团队 推进项目 pm吐槽 开发 经过我慎重的考虑,我jio得,Beta版本的吐槽还是不能少. 感想 管理团队 这学期十分庆幸成为我们这个这么优秀的团队的pm.身在pm的位置上经历这么一 ...

  9. “人向猿进阶”之软件工程第三课----WORDCOUNT.EXE统计程序

    ---恢复内容开始--- WC项目要求 这个项目要求写一个命令行程序,模仿已有的wc.exe的功能,并加以扩充,给出某程序设计源语言文件的字符数.单词数和行数.给实现一个统计程序,它能正确统计程序文件 ...

  10. Solr查询语法

    基于solr版本:6.0.0 当配置好本地的环境之后,就访问http://localhost:8080/solr/index.html.或者是访问已经放在服务器上的solr环境,例如http://10 ...