test2中第三行是什么意思呢?没有接触过这个语句

来源:1-7 Java 中的异常链

qq_汪星人_4

2018-03-08 11:16

catch (ExceptionTest e) {

RuntimeException newExc=new RuntimeException("123");

newExc.initCause(e);

throw newExc;

}


写回答 关注

1回答

  • lhtfreedom
    2018-03-08 11:39:01
    已采纳

    initCause()这个方法就是对异常来进行包装的,目的就是为了出了问题的时候能够追根究底。因为一个项目,越往底层,可能抛出的异常类型会用很多,如果你在上层想要处理这些异常,你就需要挨个的写很多catch语句块来捕捉异常,这样是很麻烦的。如果我们对底层抛出的异常捕获后,抛出一个新的统一的异常,会避免这个问题。但是直接抛出一个新的异常,会让最原始的异常信息丢失,这样不利于排查问题。举个例子,在底层会出现一个A异常,然后在中间代码层捕获A异常,对上层抛出一个B异常。如果在中间代码层不对A进行包装,在上层代码捕捉到B异常后就不知道为什么会导致B异常的发生,但是包装以后我们就可以用getCause()方法获得原始的A异常。这对追查BUG是很有利的。

    qq_汪星人...

    哦,看了半天没有太明白,再回去看了下代码,瞬间就明白了,谢谢大神

    2018-03-09 13:38:08

    共 1 条回复 >

Java入门第三季

Java中你必须懂得常用技能,不容错过的精彩,快来加入吧

409787 学习 · 4340 问题

查看课程

相似问题