对异常链的疑问

对异常链的疑问

1、在学习thorws和throw时,无论是课程里还是老师们的回答,还是练习题的解析,大家在使用"抛出"这两个字时,一会儿指throw,一会儿指throws。老师,到底哪个是抛出?

2、老师,面对异常为什么不就地解决,非要像异常链那样逐层抛出?

3、throw new Exception("我是新产生的异常1",e);这个e是指什么?

4、

catch (Exception e) {

Exception e1=new Exception("我是新产生的异常2");

e1.initCause(e);

throw e1;

}

老师,catch里的代码怎么去理解呢?

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

3回答
吃吃吃鱼的猫 2019-06-15 17:44:14

同学你好,

e是异常HotelAgeException的引用。

http://img1.sycdn.imooc.com//climg/5d04bb29000119af10140160.jpg

e1是新创建的Exception对象的引用,e是catch块捕获的异常对象Exception对象的引用,initcause()方法可以理解为将e包装成e1,然后抛出。

http://img1.sycdn.imooc.com//climg/5d04bcad00013f1c11920188.jpg

如果我的回答解决了你的疑惑,请采纳。祝:学习愉快~

吃吃吃鱼的猫 2019-06-14 18:01:34

       同学你好,

       3、e就是实例化后的异常对象,同学理解为一个对象引用即可。

       4、catch块中首先实例化一个新的异常对象e1;然后调用initCause方法,将异常e的对象重新包装成e1,这里可以理解为转化为e1;最后抛出e1的异常对象。

       如果我的回答解决了你的疑惑,请采纳。祝:学习愉快~

  • 提问者 鱼儿0001 #1
    老师,你的回复太简洁了,根本看不懂啊,能联系课程里的上下文解释下吗?你说:e就是实例化后的异常对象,同学理解为一个对象引用即可。这个e是指哪个异常的e?还有你说:catch块中首先实例化一个新的异常对象e1;然后调用initCause方法,将异常e的对象重新包装成e1,这里可以理解为转化为e1;最后抛出e1的异常对象。将异常e的对象重新包装成e1,我连这个e是哪个异常的对象都不知道,接下来包装成e1更是不懂了。
    2019-06-15 14:49:17
好帮手慕阿莹 2019-06-13 14:59:47

1、同学你好,这两个确实都是抛出,多数是指throws,throw的用的还是相对比较少的。需要同学根据视频或者具体代码中的语境来理解哦。

2、当有些异常不应该交由这个方法处理,或者这个方法处理不了的情况下就应该用throws抛出。

举个贴进生活的例子,比如,采购部的领导给你一些钱,让你去采买一些材料,但是你发现材料涨价了钱不够了,这个时候,你的这个异常是应该自己处理呢?还是把这个问题抛出了来,告诉采购部的领导,让他来处理这个异常呢?如果你的领导之前告诉过你,我就给你这些钱,你就给我把事儿办了,出什么问题自己解决,这个时候,你就只能就地处理了,而你的领导告诉过你,如果钱不够了,请把这个问题抛给我,我去给你解决。那就可以抛出去,交给调用你的人去处理了。

可能不是特别贴切,但是同学可以通过这个例子来理解,具体什么要就地处理还是要抛出异常,要根据业务的规则而定。

3、这个e其实就是这个抛出异常的实例对象。

http://img1.sycdn.imooc.com//climg/5d01f3d6000147a409830214.jpg

老师在视频的4分钟往后有讲哦,请同学再复习一下。

4、同学问题4中的代码和问题3中的实现是一样的,只是两种不同的方式而已。

老师也是在课程的6分30秒有讲解到,同学可以再听一下呦。

如果我的回答解决了你的疑惑,请采纳!祝学习愉快!

  • 提问者 鱼儿0001 #1
    老师,谢谢你的耐心回复。我问的第3个问题和第4个问题,视频已经重复看过,代码也打过,但就是不理解。希望老师能详细解释下,谢谢!
    2019-06-14 14:20:32
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星

相似问题

登录后可查看更多问答,登录/注册

请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师