文档章节

关于自定义异常的层次

猪刚烈
 猪刚烈
发布于 2014/10/12 11:40
字数 597
阅读 108
收藏 0

钉钉、微博极速扩容黑科技,点击观看阿里云弹性计算年度发布会!>>>

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

猪刚烈

猪刚烈

粉丝 22
博文 708
码字总数 110
作品 1
海淀
程序员
私信 提问
加载中
请先登录后再评论。
python之异常处理模块

一 . python 内置的异常类 在程序运行过程中,如果出现错误,python解释器会创建一个异常对象,并抛出给系统运行时。即程序终止正常执行流程,转而执行异常处理流程。 在某种特殊条件下,代码...

osc_ett4kx6e
2018/08/20
2
0
Java异常体系

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

文森特梵高
2015/08/19
451
0
Java异常处理机制

异常机制 什么是异常? 异常是程序中的一些错误,但并不是所有的错误都是异常,并且错误有时候是可以避免的。 程序运行过程中,出现不期而至的各种状况,将它们统称为异常。 比如说,你的代码...

osc_j5pkc521
05/14
5
0
Java异常处理机制

异常机制 什么是异常? 异常是程序中的一些错误,但并不是所有的错误都是异常,并且错误有时候是可以避免的。 程序运行过程中,出现不期而至的各种状况,将它们统称为异常。 比如说,你的代码...

小橘子ღ
05/13
0
0
java异常处理

异常是程序中的一些错误,但并不是所有的错误都是异常,并且错误有时候是可以避免的。比如说,你的代码少了一个分号,那么运行出来结果是提示是错误 java.lang.Error;如果你用System.out.pr...

osc_3fp081wq
2018/11/11
0
0

没有更多内容

加载失败,请刷新页面

加载更多

element ui设置表格表头高度和每一行的高度

填坑记录:今天用element ui的表格组件做用户信息展示,直接拉取的官网的代码过来,发现表头和每一行都太高了,如下:      因为第一次使用element ui的表格组件,不太清楚会遇到这样的坑...

osc_bwy4ep83
23分钟前
20
0
逆向破解之160个CrackMe —— 001

CrackMe —— 001 160 CrackMe 是比较适合新手学习逆向破解的CrackMe的一个集合一共160个待逆向破解的程序 CrackMe:它们都是一些公开给别人尝试破解的小程序,制作 crackme 的人可能是程序员...

osc_xmvqghwh
24分钟前
18
0
【.NET Core项目实战-统一认证平台】第九章 授权篇-使用Dapper持久化IdentityServer4

【.NET Core项目实战-统一认证平台】开篇及目录索引 上篇文章介绍了IdentityServer4的源码分析的内容,让我们知道了IdentityServer4的一些运行原理,这篇将介绍如何使用dapper来持久化Ident...

osc_9ntog5yq
25分钟前
25
0
用SV写一个蒙哥马利模乘的参考模型

前言 往期推送过一个蒙哥马利算法的介绍,如果要实现蒙哥马利模乘的硬件模块,那么一个参考模型是必不可少的,这一期将利用SV实现一个简单的参考模型,这个参考模型可以直接用于功能仿真 根据...

osc_f9krav3q
26分钟前
17
0
缓存数据库

缓存数据库 NoSQL(NoSQL = Not Only SQL),意即泛指非关系型数据库,(关系型数据库mysql,sqlite,oracle,即存在强烈的数据关系),是对不同于传统的关系型数据库的数据库管理系统的统称。...

osc_lqb3vmrs
27分钟前
12
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部