[六字真言]2.嘛.异常定制和通用.md
2024-08-25 07:09:35
幻世当空 恩怨休怀
舍悟离迷 六尘不改
且怒且悲且狂哉!
最近一直在循环的一首歌!
丰富自己,比取悦他人更有力量。种下梧桐树,引得凤凰来。你若盛开,蝴蝶自来!
言归正传! 言归正传!
不要去大包大揽
人懒就是动力,我上课的时候为了图省事,经常利用 Exception 捕捉所有潜在的异常这里更正一下,这样的思想不对的
,人的能力和经历是有限的,不要让他成为万能的!
publicvoid update(User user){
try{
// 假设场景
//…抛出 IOException 的代码调用
//…抛出 SQLException 的代码调用
}catch(Exception e){
//这里利用基类 Exception 捕捉的所有潜在的异常,如果多个层次这样捕捉,会丢失原始异常的有效信息
thrownewRuntimeException("Exception in com.shxt.UserDao.update异常", e);
}
}
建议重构代码为:
publicvoid update(User user){
try{
// 假设场景
//…抛出 IOException 的代码调用
//…抛出 SQLException 的代码调用
}catch(IOException e){
//仅仅捕捉 IOException
thrownewRuntimeException(/*指定这里 IOException 对应的错误代码*/code,"Exception in update", e);
}catch(SQLException e){
//仅仅捕捉 SQLException
thrownewRuntimeException(/*指定这里 SQLException 对应的错误代码*/code,"Exception in update", e);
}
}
我懒,我就要大包大揽
人懒,就是动力,胖哥就是这样!
假设我们现在做的业务中,需要在一个方法抛出的异常有如下的种类
登录异常/密码异常/角色异常/账号异常/访问异常等等
publicvoid update(User user){
try{
// 假设场景
//…抛出 登录异常 的代码调用
//…抛出 密码异常 的代码调用
//…抛出 角色异常 的代码调用
//…抛出 访问异常 的代码调用
}catch(登录异常 ex){
thrownewRuntimeException(“Exception in update”, ex);
}catch(密码异常 ex){
thrownewRuntimeException(“Exception in update”, ex);
}catch(角色异常 ex){
thrownewRuntimeException(“Exception in update”, ex);
}catch(访问异常 ex){
thrownewRuntimeException(“Exception in update”, ex);
}
}
晕了,这么多代码,疯掉了吗?念一下六字真言'打赏啊!打赏啊!'
如果你是一个比较执着的人,也比较喜欢这种方式的人,那么胖哥下面要说的就不要看了!不然就迷糊了!(^__^) 嘻嘻……
代码重构
publicvoid update(User user){
try{
// 假设场景
//…抛出 登录异常 的代码调用
//…抛出 密码异常 的代码调用
//…抛出 角色异常 的代码调用
//…抛出 访问异常 的代码调用
}catch(Exception e){
thrownewRuntimeException(“Exception in com.shxt.UserDao.update异常”, e);
}
}
一如既往的将 Exception 转换成 RuntimeException,但是这里的 e 其实是 RuntimeException 的实例,已经在前端代码中封装过
靠,玩死我算了!这样下去可没有朋友啊!不就是又改回来了吗?
解决办法:
- 可以在 RuntimeException 类中添加相关的检查,确认参数 Throwable 不是 RuntimeException 的实例。如是,将拷贝相应的属性到新建的实例上。
- 用不同的 catch 语句块捕捉 RuntimeException 和其它的 Exception。
世界之大无奇不有,心中默念六字真言:"打赏啊!打赏啊!"
最新文章
- 异步编程系列第04章 编写Async方法
- x01.os.19: linux 0.0
- Git-rebase 小笔记
- gulp用途
- Jsp语法、指令及动作元素
- StoreKit framework
- JSFのAjaxタグのoneventでbegin/complete/successを使う
- 对dpkg: error processing package xxx (--configure) 的处理
- 使用btoa和atob来进行Base64转码和解码
- MobaXterm
- Nginx日志常用统计分析命令
- idea的一些设置
- Node.js 进程平滑离场剖析
- LeetCode 929.Unique Email Addresses
- SystemUI中设置横竖屏显示
- BZOJ2244 拦截导弹
- jdbcTemplate 调用存储过程。 入参 array 返回 cursor
- 【详细】【转】CentOS 7部署ASP.NET Core应用程序
- HDU 1465 不容易系列之一
- 【noip模拟赛1】古韵之刺绣
热门文章
- [CF1019D]Large Triangle[极角排序+二分]
- effective c++ 笔记 (3-4)
- fatal error: caffe/proto/caffe.pb.h: No such file or directory
- js的各种正则表达式
- numpy 初识(三)
- 转--看完让你彻底搞懂Websocket原理
- OD之修改文件标题(一)
- Python+opencv 图像拼接
- Unity插件-NGUI学习笔记
- sql 更新多条记录