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

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

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

言归正传! 言归正传!

不要去大包大揽

人懒就是动力,我上课的时候为了图省事,经常利用 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. Elasticsearch date 类型详解

    引言 一直对 elasticsearch 中的 date 类型认识比较模糊,而且在使用中又比较常见,这次决定多花些时间,彻底弄懂它,希望能对用到的同学提供帮助. 注意:本文测试使用是 elastics ...

  2. it面试技巧

    一:请你自我介绍一下你自己? 回答提示:一般人回答这个问题过于平常,只说姓名.年龄.爱好.工作经验,这些在简历上都有.其实,企业最希望知道的是求职者能否胜任工作,包括:最强的技能.最深入研究的知识领域 ...

  3. effective c++ 笔记 (9-12)

    //---------------------------15/03/29---------------------------- //#9    绝不在构造和析构过程中调头virtual函数 { / ...

  4. js 边写边出现刚写的内容

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  5. C#_IO操作

    1.创建文件夹 //using System.IO; Directory.CreateDirectory(%%1);   2.创建文件 //using System.IO; File.Create(% ...

  6. Asp.Net_优化

    ASP.NET: 一.返回多个数据集 检查你的访问数据库的代码,看是否存在着要返回多次的请求.每次往返降低了你的应用程序的每秒能够响应请求的次数.通过在单个数据库请求中返回多个结果集,可以减少与数据库 ...

  7. Asp.Net_抓包解析xml文件为json

    protected void Button1_Click(object sender, EventArgs e) { string Phone = this.Txt_Con.Text; string ...

  8. 华为测试大牛Python+Django接口自动化怎么写的?

    有人喜欢创造世界,他们做了开发者:有的人喜欢开发者,他们做了测试员.什么是软件测试?软件测试就是一场本该在用户面前发生的灾难提前在自己面前发生了,这会让他们生出一种救世主的感觉,拯救了用户,也就拯救者 ...

  9. 一个Boss直聘机器人, 自动回复发简历

    goBoss 基佬github地址 这是基于go语言编写的一款boss直聘机器人软件(牛人版).附上Python版本, 无需配置Go环境, 我会提供windows和macos的可执行程序.不喜勿喷O( ...

  10. CentOS7使用winbind加入AD

    https://ishm.idv.tw/?p=336 CentOS 7 使用 winbind 加入 AD 需求:已經熟悉 CentOS 6 的 AD 加入方式,CentOS 7 已將 winbind ...