Java链式异常

Java链式异常


jdk 1.4 开始

通过链式异常,可以为异常关联另一个异常。第二个一场描述第一个异常的原因(描述当前异常原因的异常)

eg:假设某个方法由于试图除零而抛出arithmetiException异常,导致问题发生的实际原因并不是除零异常。而是I/O异常,该错误导致了为除数设置了一个不正确的值。


使用链式异常为Throwable的构造函数 添加了 

Throwable(Throwable causeExc)

Throwable(String msg,Throwable causeeXC)


第一种形式中 causeExc是引发当前异常的异常,即causeExc是引发当前一场的背后原因

第二种形式允许在指定引发异常的同时指定一场的描述。

————————这两个构造函数也被引入到了 异常类的Error Exception RuntimeException类中。


API方法

Throwable getCuse()

Throwable initCause(Throwable causeExc)


explain:

getCause():返回引发当前异常的异常,如果不存在异常就返回null

initCause(Throwable causeExc): 将causeExc 和调用的异常关联在一起。每个异常的initCause()方法只能调用一次


code:

 
   
  1. package javastudyforexception;
  2. /**
  3. * Created by D9ing on 16/7/8.
  4. * 链式异常的处理
  5. */
  6. public class ChainExcDemo {
  7.    /**
  8.     * 抛出异常方法
  9.     */
  10.    static void demoproc() throws NullPointerException {
  11.        NullPointerException nullPointerException = new NullPointerException("top layer");
  12.        //关联调用异常
  13.        nullPointerException.initCause(new ArithmeticException("cause"));
  14.        throw nullPointerException;
  15.    }
  16.    public static void main(String[] args) {
  17.        try {
  18.            demoproc();
  19.        } catch (NullPointerException e) {
  20.            System.out.println("caught" + e);
  21.            System.out.println("origin" + e.getCause());
  22.        }
  23.    }
  24. }

你可能感兴趣的:(JAVASE)