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

抛出异常先后问题

用main方法执行test2()时,test2()先执行test1(),不是应该先抛出DrunkException,再捕捉test2()的异常吗?

正在回答

3 回答

确实是执行了,但这个异常被包装了,main方法执行test2()就是在找test2()的异常,test2()再找test1()的异常。用慕课中的例子解释就是醉酒驾驶,车祸和人员伤亡,导致人员伤亡的是车祸,所以先找到车祸,再去找醉酒驾驶。抛出异常应该找他的直接原因。

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

qq_顶着西瓜皮的籽_03776560 提问者

所以是initCause方法起了作用?先执行main里面的catch再回过头来执行test2里的catch?
2016-08-04 回复 有任何疑惑可以回复我~
#2

春风十里不如你3 回复 qq_顶着西瓜皮的籽_03776560 提问者

initCause()这个方法就是对异常来进行包装的,为了出了问题的时候能够追根究底。
2016-08-04 回复 有任何疑惑可以回复我~

test2()会抛出异常,那为什么不声明成public void test2() throw Exception呢

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

test2()捕获test1()异常后,将其包装成了另一个异常,所以用main方法执行test2()后,应抛出包装后的异常。

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

qq_顶着西瓜皮的籽_03776560 提问者

可是test2()中try里面不是先执行test1()中的throw new DrunkException吗?
2016-08-04 回复 有任何疑惑可以回复我~
#2

金乘三 回复 qq_顶着西瓜皮的籽_03776560 提问者

我感觉是 的确是执行test1(),而test1()抛出的错误 被test2()中的try -catch捕获并且 被包装成了新的异常 所以就只抛出了 runtimeException 而至于后面又显示的 最初的异常DrunkException 是因为initCause(), 如果不是这样我觉得你就理解成 这是一种语法吧
2016-08-08 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
Java入门第三季
  • 参与学习       409792    人
  • 解答问题       4340    个

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

进入课程

抛出异常先后问题

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