异常的转换思想:当出现的异常是调用者处理不了的,就需要将此异常转换为一个调用者可以处理的异常抛出。
来源:互联网 发布:linux nano 显示行号 编辑:程序博客网 时间:2024/06/05 02:20
最经碰到学生问这样一道题目,网上有很多解释,但是现在网上大多数答案都是一个复制一个,这是在相关网站找到的资料,明确解释了该思想!
1、异常转译的原理
所谓的异常转译就是将一种异常转换另一种新的异常,也许这种新的异常更能准确表达程序发生异常。
在Java中有个概念就是异常原因,异常原因导致当前抛出异常的那个异常对象,几乎所有带异常原因的异常构造方法都使用Throwable类型做参数,这 也就为异常的转译提供了直接的支持,因为任何形式的异常和错误都是Throwable的子类。比如将SQLException转换为另外一个新的异常 DAOException,可以这么写:
先自定义一个异常DAOException:
public class DAOException extends RuntimeException { //(省略了部分代码) public DAOException(String message, Throwable cause) { super(message, cause); } } 比如有一个SQLException类型的异常对象e,要转换为DAOException,可以这么写:
DAOException daoEx = new DAOException ( "SQL异常", e);
异常转译是针对所有继承Throwable超类的类而言的,从编程的语法角度讲,其子类之间都可以相互转换。但是,从合理性和系统设计角度考虑,可将异常 分为三类:Error、Exception、RuntimeException,笔者认为,合理的转译关系图应该如图 2:
图 2 异常转译
为什么要这么做呢?笔者认为,异常的处理存在着一套哲学思想:对于一个应用系统来说,系统所发生的任何异常或者错误对操作用户来说都是系统"运行时"异 常,都是这个应用系统内部的异常。这也是异常转译和应用系统异常框架设计的指导原则。在系统中大量处理非检查异常的负面影响很多,最重要的一个方面就是代 码可读性降低,程序编写复杂,异常处理的代码也很苍白无力。因此,很有必要将这些检查异常Exception和错误Error转换为 RuntimeException异常,让程序员根据情况来决定是否捕获和处理所发生的异常。
图中的三条线标识转换的方向,分三种情况:
①:Error到Exception:将错误转换为异常,并继续抛出。例如Spring WEB框架中,将org.springframework.web.servlet.DispatcherServlet的doDispatch()方法 中,将捕获的错误转译为一个NestedServletException异常。这样做的目的是为了最大限度挽回因错误发生带来的负面影响。因为一个 Error常常是很严重的错误,可能会引起系统挂起。
②:Exception到RuntimeException:将检查异常转换为RuntimeException可以让程序代码变得更优雅,让开发人员集中经理设计更合理的程序代码,反过来也增加了系统发生异常的可能性。
③:Error到RuntimeException:目的还是一样的。把所有的异常和错误转译为不检查异常,这样可以让代码更为简洁,还有利于对错误和异常信息的统一处理。
详细内容地址:http://www.cnblogs.com/with-wang/archive/2012/03/24/java_doc_6.html
做个有素质的IT男!
- 异常的转换思想:当出现的异常是调用者处理不了的,就需要将此异常转换为一个调用者可以处理的异常抛出。
- 调用TUXEDOF服务抛出的TPETRAN(14)异常处理.
- try ,finally都抛出异常如何处理.如果try中抛出了异常,在控制权转移到调用栈上一层代码之前, finally 语句块也会执行,如果finally抛出异常,try语句快抛出的那个异常就
- 在指定方法中抛出异常,在调用该方法的地方处理异常
- java错误异常处理时一定要处理抛出的异常
- 当调用方法时出现多个异常类时,对应的两种处理方案
- opencv视频格式转换出现色彩异常的处理
- 异常处理也有处理不了的“异常”问题
- 横竖屏转换的异常处理 ClassCastException
- java调用dll异常的处理(UnsatisfiedLinkError)
- oracle 异常处理、异常分类、异常的抛出、异常的传播
- 6.2判断一个数能否被3整除,如果不能整除就抛出一个异常,并让其调用方法来捕获,显示相应的处理信息
- 关于Java抛出异常与处理异常的思考
- operator new抛出异常的处理
- 异常的定义、抛出和处理
- 异常----异常对象的抛出
- 将百分制转换为五分制,如果输入的成绩超过了0~100时,抛出异常
- 一个异常抛出的例子
- 简单的php自定义错误日志
- SQL SERVER 本地查询更新操作远程数据库
- C 从标准输入读取C源代码,并验证所有的花括号都正确的成对出现
- centos安装php失败的解决及centos下卸载软件的办法
- PHP程序员的技术成长规划
- 异常的转换思想:当出现的异常是调用者处理不了的,就需要将此异常转换为一个调用者可以处理的异常抛出。
- MyBatis Generator (MBG) 生成类增加OR条件
- php的curl也没这么复杂
- Linux中设置服务自启动的三种方式
- acle的next_day
- 转发与重定向
- 华为三层交换机做DHCP Server
- ObjectInputStream与ObjectOutputStream类
- Java NIO系列教程(二) Channel原文链接 作者:Jakob Jenkov 译者:airu 校对:丁一 Java NIO的通道类似流,但又有些不同: 既可以从通