用main方法执行test2()时,test2()先执行test1(),不是应该先抛出DrunkException,再捕捉test2()的异常吗?
确实是执行了,但这个异常被包装了,main方法执行test2()就是在找test2()的异常,test2()再找test1()的异常。用慕课中的例子解释就是醉酒驾驶,车祸和人员伤亡,导致人员伤亡的是车祸,所以先找到车祸,再去找醉酒驾驶。抛出异常应该找他的直接原因。
test2()会抛出异常,那为什么不声明成public void test2() throw Exception呢
test2()捕获test1()异常后,将其包装成了另一个异常,所以用main方法执行test2()后,应抛出包装后的异常。