异常转型和异常链

异常转型和异常链

异常转型在上面已经提到过了,实际上就是捕获到异常后,将异常以新的类型的异常再抛出,这样做一般为了异常的信息更直观!比如:
public void run() throws MyException{
 ...
 try{
  ...
 }catch(IOException e){
  ...
  throw new MyException();
 }finally{
  ...
 }
}

 

        异常链,在JDK1.4以后版本中,Throwable类支持异常链机制。Throwable 包含了其线程创建时线程执行堆栈的快照。它还包含了给出有关错误更多信息的消息字符串。最后,它还可以包含 cause(原因):另一个导致此 throwable 抛出的 throwable。它也称为异常链 设施,因为 cause 自身也会有 cause,依此类推,就形成了异常链,每个异常都是由另一个异常引起的。 
       
通俗的说,异常链就是把原始的异常包装为新的异常类,并在新的异常类中封装了原始异常类,这样做的目的在于找到异常的根本原因。


       
通过Throwable的两个构造方法可以创建自定义的包含异常原因的异常类型
Throwable(String message, Throwable cause)
         
构造一个带指定详细消息和 cause 的新 throwable
Throwable(Throwable cause)
         
构造一个带指定 cause (cause==null ? null :cause.toString())(它通常包含类和 cause 的详细消息)的详细消息的新 throwable
getCause()
         
返回此 throwable cause;如果 cause 不存在或未知,则返回 null
initCause(Throwable cause)
         
将此 throwable cause 初始化为指定值。

        Throwable的子类Exception中,也有类似的指定异常原因的构造方法:
Exception(String message, Throwable cause)
         
构造带指定详细消息和原因的新异常。
Exception(Throwable cause)
         
根据指定的原因和 (cause==null ? null : cause.toString()) 的详细消息构造新异常(它通常包含 cause 的类和详细消息)。
因此,可以通过扩展Exception类来构造带有异常原因的新的异常类。

 

七、Java异常处理的原则和技巧

 

1、避免过大的try块,不要把不会出现异常的代码放到try块里面,尽量保持一个try块对应一个或多个异常。
2
、细化异常的类型,不要不管什么类型的异常都写成Excetpion
3
catch块尽量保持一个块捕获一类异常,不要忽略捕获的异常,捕获到后要么处理,要么转译,要么重新抛出新类型的异常。
4
、不要把自己能处理的异常抛给别人。
5
、不要用try...catch参与控制程序流程,异常控制的根本目的是处理程序的非正常情况。

posted on 2008-03-19 16:16 白露 阅读(624) 评论(0)  编辑  收藏 所属分类: java基础

<2025年7月>
293012345
6789101112
13141516171819
20212223242526
272829303112
3456789

导航

统计

留言簿(1)

文章分类

文章档案

搜索

最新评论