两种异常 有什么区别?

来源:1-9 经验总结

yuhq

2016-08-15 15:41

RuntimeException newExc=new RuntimeException("司机一滴酒,亲人两行泪~") ;

newExc.initCause(e);

RuntimeException newExc=new RuntimeException(e) ;

//newExc.initCause(e);


写回答 关注

2回答

  • qq_ve餹惈箼_03823035
    2016-08-15 17:17:41
    已采纳

            区别在于:这里(new RuntimeException("司机一滴酒,亲人两行泪"))调用了RuntimeException这个新异常的含参构造器,异常打印出来第一行是这样的:java.lang.RuntimeException:        司机一滴酒,亲人两行泪;

    而RuntimeException newExc=new RuntimeException(e) 是把捕获的DrunkException e(喝大了异常)传进去,打印出来是这样:java.lang.RuntimeException:              com.imooc.test.DrunkException: 喝车别开酒!

            相当于上面那个是先抛出RuntimeException这个新异常:"司机一滴酒,亲人两行泪";

    而下面那个则是直接把捕获的DrunkException(喝大了异常),即原始异常(test1里抛出的异常),抛出。

    两个都是实现了异常链的功能。

                                                                                                                          我也不是很懂,以上都是个人理解。

    yuhq

    非常感谢!

    2016-08-15 17:20:42

    共 1 条回复 >

  • ForTheEnd
    2016-08-15 16:51:55

    仅仅是构造方式的不同,e是异常类型的一个对象,它本身携带着异常形成的原因信息,所以基本上都要通过它来创建一个新的异常,形成所谓的异常链,否则那不是就丢失了起初异常成因的信息了。

Java入门第三季

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

409792 学习 · 4340 问题

查看课程

相似问题