method3出现异常,被48行抓住,执行49、50、51、53、54
由于51抛出异常,所以22行异常,跳到28,执行29,30,31,33,34
由31抛出异常,所以8异常,跳到9,执行10,11,12,14,15
由于12抛出异常,所以61异常,跳到62,执行64虽然几个finally里面有return,但实际上先抛出了异常,异常优先,return没有执行。
我觉得如此,供你参考。

解决方案 »

  1.   

    记住几个机制就行了 
    1.发生异常之后会直接跳到catch里面去了 ,代码不会向下进行
    2.发生异常后,如果有finally 则一定会执行
    3.throw 异常后 是将异常抛给上一个调用者试试上面的规则看看
      

  2.   

    有意思!
    把finally里的return操作注释掉,结果就和你预期的一样了(当然,你的method1最后一行要补充一个return flag;)这个没有正向的学过,通过这个结果可以反推结论:
    catch块中发生“返回”操作前,会执行finally块,而finally块中直接return了,那么就不会再执行catch块中的返回操作了(包括return 和 throw操作)。