[六字真言]2.嘛.异常定制和通用.md

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

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

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

言归正传! 言归正传!

不要去大包大揽

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

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

来自为知笔记(Wiz)

时间: 2024-10-06 02:35:58

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

[六字真言]3.呢.异常的谎言,你要相信多少次?

"嘛,呢",梵文意为"如意宝",表示"宝部心",又叫嘛呢宝,其实就是有"聚宝"的意思! 现在的社会现在的人,都是喜欢虚的假的,不喜欢真的诚的,谁虚伪谁高人一等,谁真诚谁傻瓜一个,这句话很现实的,会做的不如会说的. 这就是现实,真情可贵,用心陪醉,虚伪面对,从容领会,我就是永远都学不会 不知道最近心是怎么样了,周围发生了一些固有的定律,其实知道,只是不说!有的时候感觉大家都是聪明人,但是都在做不聪明的事情! 重复多次的"

诚念六字真言的一点体悟

六字真言: 嗡(ong)嘛(ma)呢(ni)呗(bei)咪(mei)吽(hong) 中文的发音有多种,但其实这并不重要,按自己的感觉和喜欢的念就行, 念这个,其实我也没有什么正式规矩怎样怎样的念,有时候心念或听乐曲上的. 后来偶有做恶梦,在梦中我竟然也能念起,然后便恐惧退散了!~ 呵呵,这不管是心理作用还是其他什么,总觉得应该是不错的,毕竟此咒含有诸佛无尽的加持和慈悲,是诸佛 慈悲和智慧的音声显现,此咒即是观世音菩萨的微妙本心! 嗡嘛呢呗咪吽

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

"叭",除畜生道劳役之苦: 在学过的三阶段的时候,我们对SpringMVC的异常处理,一直可以算是简单中透着暴力,不要不重视异常!真的很重要,不要让它处在尴尬的位置! 在二阶段或者说三阶段中,技术一方面其中我认为最关键的地方是MVC思想的理解,对MVC理解程度决定着你学习过程中的难易程度,虽然有点夸张! 例如,当我们产生了一个 非业务异常 ,或者 非本业务可以处理的其他业务异常 ,那么我们一般会一直往 上层抛 (或者适当包装后继续抛出)直到 控制层 [我们就是这么解决问题,不知道你是否

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

最近在讲课的时候,遇到了关于上传文件过大的时候浏览器无法响应的问题,配置了捕获异常,有的学生浏览器好使,有的学生浏览器不好用!莫名其妙! MaxUploadSizeExceededException进入了无限的死循环,╮(╯▽╰)╭ 悲催! 为什么呢? 配置上传信息 在springmvc的核心配置文件配置如下信息 <!-- 5.配置上传 --> <bean id="multipartResolver" class="org.springframework.w

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

A Guide to Proper Error Handling in JavaScript 这是关于JavaScript中异常处理的故事.如果你相信 墨菲定律 ,那么任何事情都可能出错,不,一定会出错!这篇文章中我们来看下JavaScript中的出错处理.文章会覆盖异常处理使用的正反例,然后看下ajax的异步处理. JavaScript的事件驱动机制让JavaScript更加丰富,浏览器好比就是一个事件驱动的机器,错误也是一种事件.当一个错误发生时,一个事件就在某个点抛出.理论上,有人会说错误

社群运营之裂变六字诀

裂变带来的低成本.快速获客这件事,可以说是社群鸭运营及微信群生态最吸引创业者的能力.随着创业者不断地尝试.微信不断地调整,越来越多东西被逐渐明确,是时候做第一层的梳理了. 比如,想要大裂变,理解和用好这"六"个字就好,它们是:拼.帮.砍.送.比.换,见实称之为"裂变六字诀". 第一个字是"拼",拼单的拼.用户可以呼朋引伴,一起拼一件更低价格的商品. 第二个字是"帮".帮忙的帮.用户在体验产品的过程中需要帮助随时向好友求助. 第

Java网络编程从入门到精通(19):套接字(Socket)的异常

在Socket类中有很多方法在声明时使用throws抛出了一些异常,这些异常都是IOException的子类.在Socket类的方法中抛出最多的就是SocketException,其余还有七个异常可供Socket类的方法抛出.这些异常的继承关系如图1所示.其中灰色背景框所描述的例外就是Socket类的方法可能抛出的异常. 图1  异常类继承关系图 public class IOException extends Exception 这个异常是所有在Socket类的方法中抛出的异常的父类.因此,在

2016年总结:教师路的开启,爱情味的初尝 (上)

哎!2016年终于结束了,感觉这是自己二十五年生命中最漫长的一年,发生的事情真的太多太多.有毕业母校.同学.老师和朋友的留念,毕竟在帝都一待六年,还是有太多的不舍与情怀:有找工作.做毕业设计以及帮助二十多个陌生人完成毕业设计的艰辛,这些人大多数都是从未谋面的过客,只是自己刚好会写点代码,多做点挺好:有为了自己从小的教师梦,来回奔波京黔,最终放弃互联网.离开北京,虽然遗憾,但从未后悔,有的只是享受:还有讲台前给学生分享自己的大学生活,以及他们带给我的无数感动,数不清的加班夜和凌晨三点的财大:更有年

再见北理工:忆北京研究生的编程时光

两年前,我本科毕业写了这样一篇文章:< 回忆自己的大学四年得与失 >,感慨了自己在北理软院四年的所得所失:两年后,我离开了帝都,回到了贵州家乡,准备开启一段新的教师生涯,在此也写一篇文章纪念下吧! 还是那句话:这篇文章是写给自己的,希望很多年之后,回想起自己北京的六年时光,也是美好的回忆.文章可能有点长,但希望大家像读小说一样耐心品读,看完之后也能温馨一笑或唏嘘摇头,闭上眼睛想想你自己的大学生活吧,很享受的! 同时,这也是自己的第200篇原创文章,三年半的时间,说长不长,说短不短,这期间不论是