异常链执行

异常链执行

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

为什么都产生了位置信息?不是只有testThree()扑获的时候有e.printStackTrace(),也只有testThres产生位置信息

try{

testThree();

}catch(Exception e){

e.printStackTrace();

}

先执行try里面的testThree方法,testThree里面有testTwo方法,我感觉就是three到two到one,然后在执行one里面的catch到two的catch到three的catch?

它是怎么执行的?最后生成的打印顺序没搞明白,我感觉应该是颠倒来的

正在回答

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

2回答

同学你好,1. 是的,printStackTrace()输出的是三个异常。

2. 同学理解是正确的,当捕获到新的异常时,则通过带参构造或initCause()方法将旧的异常保存起来,然后到main方法提供e.printStackTrace()输出。如下图所示:http://img1.sycdn.imooc.com//climg/5e202e2e096ae32b07590423.jpg

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

好帮手慕小尤 2020-01-16 14:42:06

同学你好,1. 为什么都产生了位置信息,这就是异常链的处理,老师有具体讲解,建议同学查看课程(4:0分)https://class.imooc.com/lesson/990#mid=23552 

2. 这里在主方法中执行顺序是:运行程序,进入主方法-->主方法调用testThree(暂停主方法),进入testThree方法-->testThree方法调用testTwo方法,进入testTwo方法-->testTwo方法调用TestOne方法-->TestOne方法抛出异常-->由调用TestOne的testTwo来接收这个异常-->testTwo处理后又抛出了异常-->testThree接收testTwo抛出的异常,并处理后,继续向上抛出一个新的一下异常!-->最后由主方法来接收testThree抛出的异常!

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

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

  • 提问者 明月_0 #1
    删了e.printStackTrace()就什么也没有输出,它可以管三个test吗,还是说主方法接受了testThree抛出的异常(里面含有3个异常),然后catch里面e.printStackTrace()打印了错误信息,意思是主方法里catch扑获了3个异常然后输出了,是不是跟栈一样,新的异常出现,旧的异常就往里面进去,然后把这个栈给了main方法e.printStackTrace()输出,
    2020-01-16 15:36:09
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

0 星

相似问题

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

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

在线咨询

领取优惠

免费试听

领取大纲

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