两种在try/catch中使用finally的情况会造成异常丢失:

  1. 多层try/catch且finally处于内层

    内层的try/catch中的finally如果抛出异常,就会丢失外层try/catch的异常。

    Thinking in Java中阐述其原因是“前一个异常还没处理就抛出下一个异常”。


  2. 在finally中return

    将会丢失所有异常。