文档章节

关于自定义异常的层次

猪刚烈
 猪刚烈
发布于 2014/10/12 11:40
字数 597
阅读 20
收藏 0
点赞 0
评论 0

     纵观众多的开源框架,甚至是jdk自身,异常几乎总是按一定的类层次结构组织起来。那种认为一个系统只需要提供一个异常基类,其余所有异常都是只需要继承这一个基类的观点是武断和片面的。我们至少可以从两个方面来认识异常层次的重要性:
 
      一、有时候我们关心某一种具体的异常,需要对其做特别地处理,而有的时候,我们只需要对“一组相近”的异常做出同样的处理,在这种情况下,设计良好的异常体系就体现出了它的价值。此时我们只需要catch它们共同的直接父类而不必catch每一个子类并复制同样的异常处理代码。
 
      二、有人认为一个异常被设计出来而不被throw和catch是没有任何意义的。但是做为良好设计的产物,我们确实会在一些优秀的产品和框架中发现一些异常类,它们的主要作用就是用来被继承。或者更加确切地说是对异常进行“划分”。这种异常多是抽象类。就以经典的spring数据访问异常体系为例,作为处于异常体系中间层的org.springframework.dao.NonTransientDataAccessException,既非最高基类异常,同时又有众多的直接子类。从spring的源码中我们几乎找不到throw(org.springframework.dao.NonTransientDataAccessException是抽象类,因此不会有直接throw该异常的地方)和catch这个异常的代码。它的存在完全是与和它比肩的org.springframework.dao.TransientDataAccessException一起对异常做“范围划分“,在设计层面上体现合理的组织关系。像这种异常在众多产品和框架中大量存在。
 
      很多系统都不会出现层次过深的异常体系,多数情况下,可能是一些继承了同一基类的简单异常。但这并不表示我们没有设计异常体系的必要。在我看来,一个用户登陆异常和一个payment异常是毫无瓜葛的。如果它们的直接父类是同一个,似乎很难说得过去。当然,话又说回来,不是可以,只是不够好罢了。

本文转载自:http://blog.csdn.net/bluishglc/article/details/6094276

共有 人打赏支持
猪刚烈
粉丝 22
博文 708
码字总数 110
作品 1
海淀
程序员
Java异常体系

关于Java的异常类层次,在这张图上已经很清晰的显示出来。 Throwable:作为所有异常的祖先,分别有派生出Exception和Error两个子类。 Error:Error的出现表明是JVM作为一个运行环境出现了问题...

文森特梵高 ⋅ 2015/08/19 ⋅ 0

@Repository、@Service、@Controller 和 @Component

@Repository、@Service、@Controller 和 @Component 将类标识为Beanspring 自 2.0 版本开始,陆续引入了一些注解用于简化 Spring 的开发。@Repository注解便属于最先引入的一批,它用于将数据...

上班不要玩手机 ⋅ 2016/11/14 ⋅ 0

java异常之运行期异常和checked异常

运行期异常和checked异常的区别: Throwable 是所有 Java 程序中错误处理的父类 ,有两种资类: Error 和 Exception 。 Error :表示由 JVM 所侦测到的无法预期的错误,由于这是属于 JVM 层次...

颖辉小居 ⋅ 2016/09/27 ⋅ 0

@Repository、@Service、@Controller 和 @Component

@Repository、@Service、@Controller 和 @Component 将类标识为Bean Spring 自 2.0 版本开始,陆续引入了一些注解用于简化 Spring 的开发。@Repository注解便属于最先引入的一批,它用于将数...

Orehs ⋅ 2014/08/07 ⋅ 0

Spring 2.0 的AOP介绍及其通知类型

Spring 2.0的AOP 在Spring 2.0中最激动人心的增强之一是关于Spring AOP,它变得更加便于使用而且更加强大,主要是通过复杂而成熟的AspectJ语言的支持功能来实现,而同时保留纯的基于代理的J...

小星星程序员 ⋅ 2014/08/15 ⋅ 0

管道符和作业控制 shell变量

管道符和作业控制 管道“| ”就是将前面命令输出作为管道后面命令的输入 [root@localhost a]# touch 1.txt[root@localhost a]# ls1.txt[root@localhost a]# cat 1.txt | wc -l0[root@localh...

WiFi362227 ⋅ 2017/11/16 ⋅ 0

一文为你详细讲解对象映射库【AutoMapper】所支持场景

前言 在AutoMapper未出世前,对象与对象之间的映射,我们只能通过手动为每个属性一一赋值,时间长了不仅是我们而且老外也觉得映射代码很无聊啊。这个时候老外的所写的强大映射库AutoMapper横...

jeffcky ⋅ 2017/10/07 ⋅ 0

Javaweb开发总结

如何开发浏览器? B/S比C/S好 动态脚本语言: JSPASP PHP 客户端技术:HTML CSS(叠层样式表) flash 客户端标本语言:JavaScript(Ajax里的) vbscript 服务端技术:CGI(过时了) ASP(微软的,不...

菜牛修炼之道 ⋅ 2017/12/20 ⋅ 0

Java EE项目中异常设计及处理总结

异常,为我们处理非正常的业务流程提供了很好的解决方案,如果你有过dbase、c、pascal等过程式语言开发的经历,你一定会深刻体会到,异常机制给你的代码可读行、可维护性带来的好处,同时,程...

chace0120 ⋅ 2014/04/26 ⋅ 0

【随笔】JVM核心:JVM运行和类加载

前言 本篇博客将写一点关于JVM的东西,涉及JVM运行时数据区、类加载的过程、类加载器、ClassLoader、双亲委派机制、自定义类加载器等,这些都是博主自己的一点理解,如果有误,欢迎大家评论拍...

张丰哲 ⋅ 2017/10/29 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

20.zip压缩 tar打包 打包并压缩

6月25日任务 6.5 zip压缩工具 6.6 tar打包 6.7 打包并压缩 6.5 zip压缩工具: zip支持压缩目录 zip压缩完之后原来的文件不删除 不同的文件内容其实压缩的效果不一样 文件内有很多重复的用xz压...

王鑫linux ⋅ 12分钟前 ⋅ 0

double类型数据保留四位小数的另一种思路

来源:透析公式处理,有时候数据有很长的小数位,有的时候由在四位以内,如果用一般的处理方法,那么不足四位的小树会补充0到第四位,这样子有点画蛇添足的感觉,不太好看。所以要根据小数的...

young_chen ⋅ 18分钟前 ⋅ 0

Python 优化 回溯下降算法

使用sympy构造表达式,实现回溯下降算法 画出函数图像,先使用暴力搜索,找到最小值约为2.5左右 然后选定初始点,开始进行回溯搜索,下降方向为负梯度方向 下降的误差与步数大致呈现下面的状...

阿豪boy ⋅ 23分钟前 ⋅ 0

Django配置163邮箱出现 authentication failed(535)错误解决方法

最近用Django写某网站,当配置163邮箱设置完成后,出现535错误即:smtplib.SMTPAuthenticationError: (535, b'Error: authentication failed') Django初始配置邮箱设置 EMAIL_HOST = "smtp.1...

陈墨轩_CJX ⋅ 25分钟前 ⋅ 0

用接口模拟可伸缩枚举(34)

1、枚举的可伸缩性最后证明都不是什么好点子 扩展类型的元素是基本类型实例,基本类型的实例却不是扩展类型的元素,很混乱 目前还没有很好的方法来枚举基本类型的所有元素,及其扩展 可伸缩性...

职业搬砖20年 ⋅ 28分钟前 ⋅ 0

Ubuntu18.04 IDEA快捷键无法使用

IDEA默认的回退到上一视图的快捷键是Ctrl + Alt + Left,在ubuntu中这个快捷键被占用了,在16.04中可以在界面中取消这个快捷键,但是18.04就看不到了,可以使用以下命令解决 gsettings set ...

Iceberg_XTY ⋅ 32分钟前 ⋅ 0

如何解决s权限位引发postfix及crontab异常

一、问题现象 业务反馈某台应用服务器,普通用户使用mutt程序发送邮件时,提示“postdrop warning: mail_queue_enter: create file maildrop/713410.6065: Permission denied”,而且普通用法...

问题终结者 ⋅ 45分钟前 ⋅ 0

Unable to load database on disk

由于磁盘空间满了以后,导致zookeeper异常退出,清理磁盘空间后,zk启动报错,信息如下: 2018-06-25 17:18:46,904 INFO org.apache.zookeeper.server.quorum.QuorumPeerConfig: Reading co...

刀锋 ⋅ 今天 ⋅ 0

css3 box-sizing:border-box 实现div一行多列

<!DOCTYPE html><html><head><style> div.container{ background:green; padding:10px 10px;}div.box{box-sizing:border-box;-moz-box-sizing:border-box; /* Fir......

qimh ⋅ 今天 ⋅ 0

Homebrew简介和基本使用

一、Homebrew是什么 Homebrew是一款Mac OS平台下的软件包管理工具,拥有安装、卸载、更新、查看、搜索等很多实用的功能。简单的一条指令,就可以实现包管理,而不用你关心各种依赖和文件路径...

说回答 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部