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

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

weibo_我不学习没人爱_0

2015-12-01 10:28

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

写回答 关注

5回答

  • sxian_wang
    2015-12-01 19:24:47
    已采纳

    这是对异常的一种包装技巧。更底层产生的异常需要上层的代码来进行处理。一般而言,如果上层的代码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()就能够获得原始异常。其实这就形成一个异常链了,这对于你的代码是很有帮助的。

    慕函数173...

    newexc.initcause怎么在API中找不到呢?

    2017-05-01 08:07:22

    共 3 条回复 >

  • 追及相遇
    2017-12-15 10:10:08

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

    try{

        代码...

    }catch(FileNotFoundException e){

        throw(IOException) 

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

    }


  • ICE_Banksy
    2017-06-19 15:16:50

    Throable是不是写错了


  • weibo_老孟就是我_0
    2016-12-16 09:14:22

    很好很形象

  • 大脑艾瑞克
    2016-01-10 17:14:31

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

    大脑艾瑞克 回复qq_老表_...

    是的额,这个问题问完了之后,我才意识到有多傻。eclipse这样的IDE都会自动提示的。挺好的。

    2016-03-06 18:01:18

    共 2 条回复 >

Java入门第三季

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

409784 学习 · 4339 问题

查看课程

相似问题