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

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

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

言归正传! 言归正传!

不要去大包大揽

人懒就是动力,我上课的时候为了图省事,经常利用 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. jqGrid 奇淫巧技

    1.新建maven-web项目 结构如图 #GLOBAL_DIGITALMEDIA_SEARCH_grid-table > tbody > tr >td:last-child{ te ...

  2. PAT甲题题解-1027. Colors in Mars (20)-水。。。

    #include <iostream> #include <cstdio> #include <algorithm> #include <string.h&g ...

  3. 20135202闫佳歆--week2 一个简单的时间片轮转多道程序内核代码及分析

    一个简单的时间片轮转多道程序内核代码及分析 所用代码为课程配套git库中下载得到的. 一.进程的启动 /*出自mymain.c*/ /* start process 0 by task[0] */ p ...

  4. 《Linux内核分析》课程第五周学习总结

    姓名:何伟钦 学号:20135223 ( *原创作品转载请注明出处*) ( 学习课程:<Linux内核分析>MOOC课程http://mooc.study.163.com/course/U ...

  5. 作业一_随笔1_初来乍到:学号&博客地址

    031302540——http://www.cnblogs.com/yyj031302540/ 计算机实验班叶艺洁

  6. 祝贺自己操作系统JAVA项目有进展!!

    先公布研发过程的心得吧!!! ^_^ /** * 作者:范铭祥 * 内容及功能: 显示框创造1.0 * 我将在这个类里 一:面板1:用来先显示一副图表示顺序和处理中 * 二:面板2:类1:用来显示要处 ...

  7. Linux 基础一(系统分区、格式化与挂载)

    1.Linux 基础之系统分区与格式化 讲分区之前,先说一下硬盘结构:硬盘(机械)的横截面是一个圆,并且被分成等大小的扇区,每个扇区的大小是 512Byte,其中有 446Byte 被用来存储启动信息 ...

  8. Threadlocal 传递参数(百度二面)

    去百度面试,二面的时候 面试官问 如果我想跟踪一个请求,从接收请求,处理到返回的整个流程,有没有好的办法,后来面试官说了 Threadlocal 可以做到传递参数. 这是ThreadLocal的一个功 ...

  9. Delphi cxGrid加行号

    procedure SetRowNumber(var ASender: TcxGridTableView; AViewInfo: TcxCustomGridIndicatorItemViewInfo; ...

  10. LOJ 530 最小倍数(数论)

    题意 有\(T\)组数据. 给定\(p\),求最小的正整数\(n\),使得\(n!\%p=0\). 由于\(p\)很大,输入将给出\(m\)和\(e_1,e_2...e_m\),表示\(p=\prod ...