捕获一个异常然后接着抛出另一个异常,并把原始异常的信息保存下来的是一种典型的链式处理,被称为“异常链”。

     所有Throwable的子类在构造器中都可以接受一个cause对象作为参数。这个cause就是来表示原始异常,这样可以把原始异常传递给新的异常,使得即使你在当前位置创建并抛出了新的异常,你也能通过这个异常链追踪到异常最初发生的位置。

 

  1. public calSal throws SalException  
  2.     try 
  3.     { 
  4.         //实现结算工资的业务逻辑 
  5.         ... 
  6.     } 
  7.     catch(SQLException sqle) 
  8.     { 
  9.         //把原始异常记录下来,留给管理员 
  10.         ... 
  11.         //下面异常中的message就是向用户的提示 
  12.         throw new SalException(sqle); 
  13.     } 
  14.     catch(Exception e) 
  15.     { 
  16.         //把原始异常记录下来,留给管理员 
  17.         ... 
  18.         //下面异常中的message就是向用户的提示 
  19.         throw new SalException(e); 
  20.     } 
  21. //创建下面的SalException业务异常类后,就可以用它来封装原始异常,从而实现对异常的链式处理。 
  22. class SalException extends Exception 
  23.     public SalException(){} 
  24.     public SalException(String msg) 
  25.     { 
  26.         super(msg); 
  27.     } 
  28.     //创建一个可以接受Throwable参数的构造器 Throwable 是所有Exception和Error的父类 
  29.     public SalException(Throwable t) 
  30.     { 
  31.         super(t); 
  32.     }