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. }

  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java中的异常是指程序在运行过程中出现的错误或者异常情况,需要通过一定的处理方进行处理。在Java中,异常处理的方有很多种,其中最常见的方是使用try-catch语句来捕获异常。 在Java中,可以使用throw关键字来抛出异常。例如,我们可以在一个方法中检测到某些错误情况,并使用throw语句抛出一个异常。这个异常可以被其他方法捕获并进行处理。 Java中的异常可以按照类型分为两种:受检异常和非受检异常。受检异常必须在方法签名中声明,否则编译器会报错。而非受检异常则不需要在方法签名中声明。 链异常是指在捕获异常时,可以将原始异常信息和当前异常信息一起抛出,形成一个异常链。这样可以帮助程序员更快地定位到问题所在,并且方便进行排查和修复。 下面是一个简单的示例代码,演示如何使用throw语句抛出异常: ```java public class ExceptionDemo { public static void main(String[] args) { try { int result = divide(10, 0); System.out.println("result = " + result); } catch (Exception e) { e.printStackTrace(); } } public static int divide(int a, int b) throws Exception { if (b == 0) { throw new Exception("除数不能为0"); } return a / b; } } ``` 在上面的示例代码中,我们定义了一个divide方法,用于计算两个数的商。如果除数为0,则会抛出一个异常。在main方法中调用divide方法,并使用try-catch语句捕获异常。如果抛出异常,会打印出异常堆栈信息。 需要注意的是,在方法签名中使用throws关键字声明可能抛出的异常类型。 如果我们使用链异常来抛出异常,代码示例如下: ```java public class ExceptionDemo { public static void main(String[] args) { try { int result = divide(10, 0); System.out.println("result = " + result); } catch (Exception e) { e.printStackTrace(); } } public static int divide(int a, int b) throws Exception { try { return a / b; } catch (Exception e) { throw new Exception("除法运算出现异常", e); } } } ``` 在上面的示例代码中,我们在divide方法中使用try-catch语句捕获除法运算异常,并将原始异常信息和当前异常信息一起抛出。在主方法中,我们依然使用try-catch语句捕获异常,并打印出异常堆栈信息。 这样,我们就可以使用链异常来抛出异常,方便进行排查和修复。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值