“唵”,表示佛部心,谓念此字时,自己的身体要应于佛身,口要应于佛口,意要应于佛意,所谓身、口、意与佛成一体,才能获得成就;

异常的选择

异常的分类,你应该知道:

  • 受审查异常

  • 非受审查异常

发现学生在使用过程当中,没有区分,也不知道应该什么时候使用?跟不清楚怎么样合理的使用异常!
我再后面接手的课程体系当中,学生如果在使用异常的情况下,最爱的是Exception,怎么解释呢,简单好用?只能心里默默的呵呵!而作为一名开发人员使用比较多的是非受审查异常[继承RuntimeException]!往往这个时候,学生就懵圈了,为什么呢?因为看不到错误了,不知道哪里错了!
心在滴血,因为给自己增加了难度,何必难为自己嫩?
那么,如何使用异常呢?简单说一下个人的理解:

  • 调用或者执行的代码不能继续执行,需要立即终止。出现这种情况的可能性太多太多,例如服务器连接不上、参数不正确等。这些时候都适用非检测异常,不需要调用代码的显式捕捉和处理,而且代码简洁明了。

  • 调用代码需要进一步处理和恢复。假如将 SQLException 定义为非检测异常,这样操作数据时开发人员理所当然的认为 SQLException 不需要调用代码的显式捕捉和处理,进而会导致严重的 Connection 不关闭、Transaction 不回滚、DB 中出现脏数据等情况,正因为 SQLException 定义为检测异常,才会驱使开发人员去显式捕捉,并且在代码产生异常后清理资源。当然清理资源后,可以继续抛出非检测异常,阻止程序的执行。根据观察和理解,检测异常大多可以应用于工具类中。

胖先生说一下:

  1. 让机器自己去处理,我们不管!

  2. 就是我们需要捕获并且自己处理

在实际开发当中,胖显示都会把受审查变成非受审查的,但是同时我根据自己的业务需要进行处理!

别把客户想的太聪明

将异常直接打印在客户端的例子屡见不鲜,以 JSP 为例,一旦代码运行出现异常,默认情况下容器将异常堆栈信息直接打印在页面上。其实从客户角度来说,任何异常都没有实际意义,绝大多数的客户也根本看不懂异常信息,软件开发也要尽量避免将异常直接呈现给用户。

客户都是比较懒的人,如果出现那种文字,站在你的角度,我想会感觉到厌恶,考察我英语四级能力呢?

 package com.pangsir.test.sample.exception;/*** 自定义 RuntimeException* 添加错误代码属性,一种简单的封装*/public class RuntimeException extends java.lang.RuntimeException { //默认错误代码 public static final Integer GENERIC = 1000000; //错误代码private Integer errorCode; public RuntimeException(Integer errorCode, Throwable cause) {this(errorCode, null, cause);}public RuntimeException(String message, Throwable cause) {//利用通用错误代码this(GENERIC, message, cause);}public RuntimeException(Integer errorCode, String message, Throwable cause) {super(message, cause);this.errorCode = errorCode;}public Integer getErrorCode() {return errorCode;} }

正如示例代码所示,在异常中引入错误代码,一旦出现异常,我们只要将异常的错误代码呈现给用户,或者将错误代码转换成更通俗易懂的提示。其实这里的错误代码还包含另外一个功能,开发人员亦可以根据错误代码准确的知道了发生了什么类型异常.

别玷污我

我们授课当中经常说基于MVC思想的开发架构,因此我们将代码分为controller,Service,Dao等不同的层次,Dao层中经常会抛出异常的方法[因为不熟练,因为SQL语句经常写错误],都是过来人:
Dao层代码:

public User load(Integer user_id) throw SQLException {
//根据 ID 查询数据库,获取用户对象信息
}

如果代码是这样写的,没有什么问题,可以说正确,但是不符合规范!
从设计耦合角度仔细考虑一下,这里的 SQLException 污染到了上层调用代码,调用层需要显式的必须利用 try-catch 捕捉 或者 向更上层次继续抛出。根据隔离原则,我们可以适当修改成:

 public User load(Integer user_id) {try{//根据 ID 查询数据库}catch(SQLException e){//利用非检测异常封装检测异常,降低层次耦合throw new RuntimeException(SQLErrorCode, e);}finally{//关闭连接,清理资源}}

别不在乎我的感受

在学生开发当中,也可以说我为了图省事的过程当中,经常说的一句话就是你把异常输出[打印]控制台中,其实这样没有任何意思!
重要|重要|重要:

这样的处理没有意思,因为你没有中断程序的执行,进而调用代码会继续自行,导致更多的异常

想想你是否写过这样的代码:

 public void update(User user){try{//..some code that throws SQLException}catch(SQLException ex){/***了解的人都知道,这里的异常打印毫无意义,仅仅是将错误堆栈输出到控制台。* 而在 Production[生产] 环境中,需要将错误堆栈输出到日志。* 而且这里 catch 处理之后程序继续执行,会导致进一步的问题* */ex.printStacktrace();}}

代码重构

 public void update(User user){try{//..some code that throws SQLException}catch(SQLException ex){//转换成非受审查异常throw new RuntimeException(“自己描述性语言,例如com.pangsir.user.dao.UserDao.update 执行过程出错”, ex);}finally{//关闭资源}}

这个误区比较基本,一般情况下都不会犯此 > 低级错误 < 。

地主家也没有余粮

看一下,下面的代码是否有问题?

 //假设获取用户的所有信息List<User> userList = this.userDao.listAll();//for(int i=0; i<userList.size() ; i++){try{}catch(XXXException e){//..... 异常处理}}

在讲课的时候我们已经知道异常处理占用系统资源.别把这个单独看成一个演示示例,想想我们的设计当中从控制层->Service->Dao层

换个角度说,类 A 中执行了一段循环,循环中调用了 B 类的方法,B 类中被调用的方法却又包含 try-catch 这样的语句块。褪去类的层次结构,代码和上面如出一辙。

还有一次隐藏的错误,这里我就不说了!有过有知道请留言给我,不是错误,就是不符合地主家没有余粮的概念!

[六字真言]1.唵.遁入佛门之异常.md相关推荐

  1. 诚念六字真言的一点体悟

    六字真言: 嗡(ong)嘛(ma)呢(ni)呗(bei)咪(mei)吽(hong) 中文的发音有多种,但其实这并不重要,按自己的感觉和喜欢的念就行, 念这个,其实我也没有什么正式规矩怎样怎样的念,有时 ...

  2. 公私密钥对的应用-十六字真言

    十六字真言:公钥加密.私钥解密:私钥签名.公钥验签. 公私密钥对 公私密钥对正统叫法为公钥加密算法(非对称加密算法的一种),最早由Diffie和Hellman在文献"New Directio ...

  3. 成功创业的“六字真言”

    一个创业成功者初期原始资本的快速积累和一个18岁创业25岁身家百万的创业成功人事谈到如何才能在创业初期快速积累原始资本的话题,听了他的"六字真言"觉得大有收获.如果大家有兴趣可以来 ...

  4. 首页快速排名六字真言

    每一位站长辛辛苦苦把网站搭建好以后,接下来最最核心的事情就是如何把排名做到百度的首页上去,以获得精准的定向流量,产生价值.今天就把快速排名六字经给大家分享一下: 一.外链 很多人都知道外链的重要,因为 ...

  5. 论投资六字心经——买预期,卖事实

    本文发于微信公众帐号: 一界码农(The_hard_the_luckier) 无需授权即可转载: 甚至无需保留以上版权声明--一界码农+产品汪+U赞签约作者 个人微信号(liuhua7851) 脑海里 ...

  6. 成功的九字真言(冯唐)

    成功九字真言 不要怕 不着急 不要悔

  7. MySQL入门 (六) : 字元集与资料库

    1 Character Set与Collation 任何资讯技术在处理资料的时候,如果只是单纯的数值和运算,那就不会有太复杂的问题:如果处理的资料是文字的话,就会面临世界上各种不同语言的问题. 以资料 ...

  8. 贵州:2018经济增速继续领先 2019“九字真言”主攻高质量

    贵州省第十三届人民代表大会第二次会议27日在贵阳开幕. 贺俊怡 摄 贵州省第十三届人民代表大会第二次会议27日在贵阳开幕. 贺俊怡 摄 贵州:2018年经济增速继续领先 2019年"九字真言 ...

  9. 六字诀教你辨肾脏是否健康

    来源:中国数字科技馆 常有些人出现腰酸乏力时就不自主想到肾虚,甚至跑去肾病科做检查,但往往被告知的结果是:你的肾功能很正常,多喝水,注意休息. 其实,中医的肾虚不等于西医的肾功能异常.西医是从外国传入 ...

最新文章

  1. iOS 关于Blocks
  2. python线程执行带有参数的任务(args、kwargs)
  3. python logging.getlogger_logging.getLogger与logger的父子关系
  4. 云原生存储系列文章(一):云原生应用的基石
  5. 下 面 这 条 语 句 一 共 创 建 了 多 少 个 对 象 : String s=a+b+c+d;
  6. mysql技术内幕sampdb_MySQL技术内幕汇总
  7. ie6 css padding,IE6padding的一个影响布局的问题在
  8. PyTorch:存储和恢复模型并查看参数,load_state_dict(),state_dict()
  9. 你还在用 Date?建议使用 LocalDateTime 了!
  10. Android 系统(263)---Glide框架
  11. Netty工作笔记0032---零拷贝AIO内容梳理
  12. linux 有道词典无法屏幕取词,有道词典怎么开启屏幕取词功能 有道词典开启屏幕取词功能方法...
  13. java面试之简述一下 Java 垃圾回收机制?
  14. php在线中文转英文,thinkphp页面的多语言切换,中文、英文之间的转换
  15. 可解释机器学习- LIME模型讲解|interpretable machine learning-LIME
  16. log4j不打印日志的问题解决方式一
  17. Maven中settings文件详解
  18. web项目打war包方法 两步解决(极其简单方便)
  19. 计算机系统盘涨满怎么办,电脑重装系统后C盘爆满?教你一招让空间大幅释放!-电脑c盘满了怎么办...
  20. hpm1005能扫描不能打印_小米米家喷墨打印一体机体验:500元以内学生和职场人的实惠选择...

热门文章

  1. php 采集不到内容_Thinkphp5与QueryList,也可以实现采集(爬虫)页面功能
  2. python代码段有什么用_25个超有用的Python代码段
  3. linux oracle11g客户端安装
  4. docker 管理工具_详解Docker可视化管理工具shipyard--部署教程及功能展示
  5. python列表索引 end start_Pandas:在Pandas数据帧中查找连续索引的startend值
  6. 计算机excel图表考试题库,2016年职称计算机考试Excel操作题库
  7. Python案例:求转置矩阵
  8. 【BZOJ2553】禁忌,AC自动机+期望DP+矩乘
  9. 【HDU5482】Numquam vincar,暴力(da biao)预处理+组合数
  10. 4.线性和卷积——不同种类的噪声、中值滤波器揭破和实战_5