美文网首页
异常链常用方式

异常链常用方式

作者: dream新世界 | 来源:发表于2018-10-23 18:11 被阅读0次

1、异常链中initCause(e)的作用是什么啊?

不是为了实现哪一句代码的。initCause()这个方法就是对异常来进行包装的,目的就是为了出了问题的时候能够追根究底。因为一个项目,越往底层,可能抛出的异常类型会用很多,如果你在上层想要处理这些异常,你就需要挨个的写很多catch语句块来捕捉异常,这样是很麻烦的。

如果我们对底层抛出的异常捕获后,抛出一个新的统一的异常,会避免这个问题。但是直接抛出一个新的异常,会让最原始的异常信息丢失,这样不利于排查问题。举个例子,在底层会出现一个A异常,然后在中间代码层捕获A异常,对上层抛出一个B异常。如果在中间代码层不对A进行包装,在上层代码捕捉到B异常后就不知道为什么会导致B异常的发生,但是包装以后我们就可以用getCause()方法获得原始的A异常。这对追查BUG是很有利的。

class A{
    try{
        ...
    }catch(AException a){
     throw new BException();
    }
}
...
class B{
    try{
        //调用类a的相关操作
        ...
    }catch(BException b){
        //这时候你需要去看b异常式什么问题导致的,你在A类里面
        //没有对AException进行包装,所以你无法知道是A导致的B
    }
}

如果包装以后:

class A{
    try{
        ...
    }catch(AException a){
        BException b = new BEexception();
        b.initCause(a);
        throw b;
    }
}
...
class B{
    try{
        ...
    }catch(BException b){
        //什么导致了b呢?
        b.getCause();//得到导致B异常的原始异常
    }
}

简单理解,initCause(e)可以将异常带到另一个异常,通过getCause()可以得到异常的相关信息,而不会造成信息的遗失。

try{
    ...
}catch(Exception e){
    RuntimeException  newE = new RuntimeException("这是一个新的异常!");
    newE.initCause(e);
    throw newE;
}

打印结果:

...这是一个新的异常!

cause by :e....

initCause()不会覆盖掉原有异常的信息,它初始化的是newE异常的造成原因。

相关文章

  • 异常链常用方式

    1、异常链中initCause(e)的作用是什么啊? 不是为了实现哪一句代码的。initCause()这个方法就是...

  • swift提供三种处理异常的方式

    方式一:try方式 程序员手动捕捉异常 方式二:try?方式(常用方式) 系统帮助我们处理异常,如果该方法出现了异...

  • 异常处理

    1. 异常抛出 下面是我们最常用到的抛出异常的方式, 当然通过源码可以看到,NullPointerExceptio...

  • 小程序全栈学习-自定义全局异常处理(上)

    面向过程的异常处理使得代码及其复杂,不是好的处理异常的方法。项目中常用的是全局异常处理的方式。 编写全局异常处理的...

  • Java——异常处理的常用方式

    自定义异常 捕获异常

  • Java优雅的异常处理

    Java中出现报异常,会导致代码无法成功编译,影响后面代码的执行,所以我们要解决这些异常。 常用的异常的处理方式有...

  • js基础之实现继承的几种方式

    js 实现继承的方式有: 原型链继承; 构造函数继承; 组合继承(原型链继承 + 构造函数继承)(最常用);(原型...

  • es5的部分继承以及es6的class

    一、JavaScript常用的原型继承方式 原型链继承 2,构造函数继承(对象冒充继承) 3,组合继承(原型链继承...

  • 2019-06-11

    switch() case()\ 数组: 面向对象的方式创建 直接创建。 数组的常用方法: join 可以加东西链...

  • 异常链

    当一个异常中包含了另一个异常结果会如何!!! 最终程序抛出的是子异常,就是被包含的那个异常,这样的话在审查问题的时...

网友评论

      本文标题:异常链常用方式

      本文链接:https://www.haomeiwen.com/subject/msgazftx.html