Java异常中的异常链机制

一.异常链

  1. 常常会再捕获一个异常后跑出另外一个异常,并且希望把异常原始信息保存下来,这被称为异常链。
  2. 在JDK1.4以前,程序员必须自己编写代码来保存原始异常信息,
  3. 现在所有Throwable的子类子构造器中都可以接受一个cause对象作为参数,这个cause就异常原由,代表着原始异常,即使在当前位置创建并抛出行的异常,也可以通过这个cause追踪到异常最初发生的位置。
  4. Throwable类及其所有的子类都提供了带cause参数的构造器,其他的异常类就只有通过initCause()来设置cause了。

二.代码

Java代码  收藏代码

  1.  
  2. public class ExceptionCause {  
  3.     public static void main(String[] args) throws Exception {  
  4.     test1();  
  5.     }  
  6.   
  7.     private static void test1() throws Exception{  
  8.     try{  
  9.         test2();  
  10.     }catch(NullPointerException ex){  
  11. //1     Exception bussinessEx = new Exception("packag exception");  
  12. //      bussinessEx.initCause(ex);  
  13. //      throw bussinessEx;  
  14. //2     throw new Exception("packag exception", ex);  
  15. //3     throw (Exception)ex.fillInStackTrace().initCause(ex);  
  16.     }  
  17.     }  
  18.       
  19.     private static void test2(){  
  20.     test3();  
  21.     }  
  22.       
  23.     private static void test3(){  
  24.     throw new  NullPointerException("str is null");  
  25.     }  
  26.   
  27. }  
  1. 1和2分别通过initCause()和构造器设置cause。
  2. 3的出发点和1 2 一样,当能否运行通过?答案是不能,参考http://zy19982004.iteye.com/admin/blogs/1974796 throwable 不能是它自己的 cause。
  3. 控制台信息

    Java代码  收藏代码

    1. Exception in thread "main" java.lang.Exception: packag exception  
    2.     at com.jyz.study.jdk.exception.ExceptionCause.test1(ExceptionCause.java:18)  
    3.     at com.jyz.study.jdk.exception.ExceptionCause.main(ExceptionCause.java:11)  
    4. Caused by: java.lang.NullPointerException: str is null  
    5.     at com.jyz.study.jdk.exception.ExceptionCause.test3(ExceptionCause.java:31)  
    6.     at com.jyz.study.jdk.exception.ExceptionCause.test2(ExceptionCause.java:27)  
    7.     at com.jyz.study.jdk.exception.ExceptionCause.test1(ExceptionCause.java:16)  
    8.     ... 1 more  

笔者开设了一个知乎live,详细的介绍的JAVA从入门到精通该如何学,学什么?

提供给想深入学习和提高JAVA能力的同学,欢迎收听https://www.zhihu.com/lives/932192204248682496

提供给想深入学习和提高JAVA并发编程能力的同学,欢迎收听https://www.zhihu.com/lives/1018219399903387648

猜你喜欢

转载自blog.csdn.net/yizhenn/article/details/68946432