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

newExc.initCause(e); 这句话是什么意思 可有可无么

newExc.initCause(e);  这句话是什么意思  可有可无么

正在回答

5 回答

这是对异常的一种包装技巧。更底层产生的异常需要上层的代码来进行处理。一般而言,如果上层的代码catch到一个异常以后,你想对更上层的结构抛出一个更高级异常来说明。你可以直接在catch语句块中throw一个新的异常,但是这样的做法是不被提倡的,因为你这样会丢失底层产生的异常的信息。现在假如在你的某段代码会产生FileNotFoundException,你需要通过一个中间的代码向上面抛出一个IOException你有这么两种做法:

try{
    代码...
}catch(FileNotFoundException e){
    throw new IOException;
}

这是第一种,但是这种做法是不被提倡的,因为他会丢掉原始异常。正确的做法是这样的:

try{
    代码...
}catch(FileNotFoundException e){
    Throable se = new IOException("error...");
    se.initCause(e); 
    throw se;
}

initCause()的作用你可以理解成是保存原始的异常,当你想要知道底层发生了什么异常的时候调用getCause()就能够获得原始异常。其实这就形成一个异常链了,这对于你的代码是很有帮助的。

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

weibo_我不学习没人爱_0 提问者

非常感谢!
2015-12-01 回复 有任何疑惑可以回复我~
#2

此用户不存在或被删除

说的真棒!
2015-12-04 回复 有任何疑惑可以回复我~
#3

慕函数1733451

newexc.initcause怎么在API中找不到呢?
2017-05-01 回复 有任何疑惑可以回复我~

第一种代码也可以写成这样,是不是就考虑一下“不提倡”了呢?代码如下:

try{

    代码...

}catch(FileNotFoundException e){

    throw(IOException) 

    new IOException("error...").initCause(e);

}


0 回复 有任何疑惑可以回复我~

Throable是不是写错了


0 回复 有任何疑惑可以回复我~

很好很形象

0 回复 有任何疑惑可以回复我~

您好,我其实想知道,异常链是干嘛用的?这个异常链很经常用到么?

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

qq_老表_1

我觉得应该较为常用,应为我们编写程序的时候比较固定化思维,都按照我们自己的设计的步骤操作程序,那坑定不会出现问题,但是用户就不一样了,打乱操作步骤什么的就会导致异常发生,我们会添加一些自定义的异常来提醒他们这种操作正确,得不到想要的结果。
2016-03-05 回复 有任何疑惑可以回复我~
#2

大脑艾瑞克 回复 qq_老表_1

是的额,这个问题问完了之后,我才意识到有多傻。eclipse这样的IDE都会自动提示的。挺好的。
2016-03-06 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

newExc.initCause(e); 这句话是什么意思 可有可无么

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