为了账号安全,请及时绑定邮箱和手机立即绑定

initCause(e)方法

 initCause(e)方法的作用是什么

正在回答

2 回答

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

3 回复 有任何疑惑可以回复我~
#1

邓一格 提问者

谢谢老哥,解释得非常细
2017-09-06 回复 有任何疑惑可以回复我~

这是对异常的一种包装。因为在catch语句块中throw一个新的异常时会丢失底层产生的异常的信息,所以直接在catch中抛出异常是不被提倡的。

try{

test1();

}catch(DrunkException e){

    RuntimeException newExc= new RuntimeException();

    newExc.initCause(e); 

    throw newExc;

} 

而包装成一个新异常后,调用initCause()方法,再将其抛出给更上一层的调用者处理,它的作用你相当于保存了原始的异常信息。其实这相当于形成一个异常链,可以很清楚地显示出原始的异常出处。否则可能会丢失原始的异常信息。


2 回复 有任何疑惑可以回复我~
#1

邓一格 提问者

谢谢老哥
2017-09-06 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

initCause(e)方法

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信