java提高:采用异常链传递异常

星朝      2022-04-08     217

关键词:

一、分析

    异常需要封装,但是仅仅封装还是不够的,还需要传递异常。一个系统的友好型的标识,友好的界面功能是一方面,另一方面就是系统出现非预期的情况的处理方式了。

二、场景

    比如我们的JEE项目一般都又三层:持久层、逻辑层、展现层,持久层负责与数据库交互,逻辑层负责业务逻辑的实现,展现层负责UI数据的处理。

    又这样一个模块:用户第一次访问的时候,需要持久层从user.xml中读取数据,如果该文件不存在则提示用户创建之,那问题就来了:如果我们直接把持久层的异常FileNotFoundException抛弃掉,逻辑层根本无从得知发生任何事情,也就不能为展现层提供一个友好的处理结果,最终倒霉的就是展现层:没有办法提供异常信息,只能告诉用户“出错了,我也不知道出了什么错了”—毫无友好性而言。

    正确的做法是先封装,然后传递,过程如下:

    1.把FileNotFoundException封装为MyException。

    2.抛出到逻辑层,逻辑层根据异常代码(或者自定义的异常类型)确定后续处理逻辑,然后抛出到展现层。

    3.展现层自行确定展现什么,如果管理员则可以展现低层级的异常,如果是普通用户则展示封装后的异常。

    异常封装如下:    

  1. public classIOException extends Exception{
  2. //定义异常的原因
  3. publicIOException(String message){
  4. super(message);
  5. }
  6. //定义异常原因,并携带原始的异常
  7. publicIOException(String message,Throwable cause){
  8. super(message,cause);
  9. }
  10. //保留原始异常信息
  11. publicIOExcepiton(Throwable cause){
  12. super(cause);
  13. }
  14. }

    链中传递异常代码如下:

  1. try{
  2. //DoSomethind
  3. }catch(Exceptione){
  4. //这种形式也可以叫异常转译,调用者获得该异常后在调用getCause()方法即可获得Exception的异常信息,如此即可以方便查找异常的根本信息,便于解决问题。
  5. thrownew IOException(e);
  6. }

三、建议

    异常需要封装和传递,我们在进行系统开发的时候,不要“吞噬”异常,也不要“赤裸裸”的抛出异常,封装后在抛出,或者通过异常链传递,可以达到系统更健壮、友好的目的。


新技术,新未来!欢迎大家关注“1024工场”微信服务号,时刻关注我们的最新的技术讯息!(甭客气!尽情的扫描或者长按!)
技术分享图片



java程序的151个建议-提倡异常封装,采用异常链传递异常(代码片段)

Java语言的异常处理机制可以确保程序的健壮性,提高系统的可用率,但是JavaAPI提供的异常都是比较低级的(这里的低级是指“低级别”的异常),只有开发人员才能看得懂,才明白发生了什么问题。而对... 查看详情

java编程思想-异常

1.使用异常链,需要采用如下方式包装捕获到的异常;publicvoidtwo(){System.out.println("two()");try{one();}catch(Throwablee){//e=e.fillInStackTrace();thrownewRuntimeException(e);}}调用two(),会产生如下异常栈帧信息,包含之前异常。2.直接catch、抛出异常... 查看详情

java异常链

一.Java中的异常链目的:追踪到异常最初发生的位置方式:重新构造异常1publicclassRethrowing{23//模拟A层异常4publicstaticvoidA()throwsException{5System.out.println("现在在A层:");6thrownewException("A层出现异常");7}89//模拟B层10publicstaticvoidB()throws 查看详情

java第50节java中的异常链

2016-06-301异常链 两个或多个不同的异常出现在同一个程序中,并且会发生嵌套抛出,我们称之为异常链。packagecom.java1995;/***异常链*@authorAdministrator**/publicclassExceptionChainTest{publicstaticvoidmain(String[]args){Calculatorc=newCalculator();tr 查看详情

java异常——捕获异常+再次抛出异常与异常链

...ADME0.1)本文描述+源代码均转自corejavavolume1,旨在理解java异常——捕获异常+再次抛出异常与异常链的相关知识;【1】捕获异常相关1.1)如果某个异常发生的时候没有再任何地方进行捕获,那程序就会运行终止:并在控制台上打... 查看详情

程序有异常不知道咋办?来学习java异常处理知识点和异常链机制

Java异常处理知识点和异常链机制异常处理是程序设计中一个非常重要的方面,毕竟人无完人,不可能永不犯错,程序中有异常是很正常的,Java语言在设计的当初就考虑到这些问题,提出异常处理的框架的方案,下面是我对Java异... 查看详情

异常+异常链(代码片段)

异常:在程序运行过程中发生的不正常事件Java中所有异常都是Exception(父类)传统处理程序中异常:System.exit(1);参数必须为非0数,结束/退出JVM(java虚拟机)System.err.println();控制台输出错误流,为红色字体。异常处理机制:为程序提供... 查看详情

java提高篇——java异常处理

异常的概念异常是程序中的一些错误,但并不是所有的错误都是异常,并且错误有时候是可以避免的。比如说,你的代码少了一个分号,那么运行出来结果是提示是错误java.lang.Error;如果你用System.out.println(11/0),那么你是因为你... 查看详情

c++异常对象的传递(代码片段)

异常链中的对象似乎是由异常机制独立维护,而不是throw后面的对象,下面的程序调用了两次复制构造函数staticintc=0;classMyException intid;public:MyException():id(c++) cout<<"MyException()---------------"<< 查看详情

从零开始的java开发1-5-1异常:分类异常处理try-catch-finally多重catchfinally与returnthrowsthrow关键字自定义异常类异常链(代码片段)

文章目录什么是异常异常分类异常处理try-catch-finally使用多重catch结构处理异常终止finally执行的方法return关键字在异常处理中的作用使用throws声明异常类型使用throw抛出异常对象自定义异常类异常链总结异常异常处理throw和throws自... 查看详情

java示例代码_如果传递了IPV6地址,则捕获异常

java示例代码_如果传递了IPV6地址,则捕获异常 查看详情

什么是belady异常现象

...全部页面,有时就会出现分配的页面数增多但缺页率反而提高的异常现象。Belady现象可形式化地描述为:一个进程户要访问M个页,OS分配舻个内存页面给进程P;对一个访问序列S,发生缺页次数为PE(占,N)。当N增大时,PE(S,N)时... 查看详情

java示例代码_Android locationManager空指针异常?(如何传递上下文?)

java示例代码_Android locationManager空指针异常?(如何传递上下文?) 查看详情

java异常java.lang.unsupportedoperationexception

在项目中采用一个枚举的集合,本人采用Collections中的空集合Collections.emptyList()在添加时发生异常:常见集合如下:privateList<VacationCategory>vacationcategorys=Collections.emptyList();  报错误如下:--Encapsulatedexception--------- 查看详情

10.java异常问题

目录介绍10.0.0.1见过哪些运行时异常?异常处理机制知道哪些?从异常是否必须需要被处理的角度来看怎么分类?10.0.0.2运用Java异常处理机制?异常处理的原理?Java中检查异常和非检查异常的区别?10.0.0.3异常处理的过程中,你... 查看详情

java异常机制

...就是指程序在出现问题时依然可以正确的执行完。Java是采用面向对象的方式来处理异常的。处理过程:1. 抛出异常:在执 查看详情

java异常处理

...定的返回值来表示异常情况,并且正常流程和异常流程都采用相同的流程控制语句。传统异常处理的缺点在于:java异常处理的优点在于: 查看详情

java_异常

处理异常过程Java采用面向对象的方式来处理异常,处理过程:1.抛出异常:在执行一个方法时,如果发生异常,则这个方法生成代表该异常的一个对象,停止当前执行路径,并把异常对象提交给JRE2.捕获异常:JRE得到该异常后,寻找相应的代... 查看详情