根据JLS 14.20.2的规定,执行try-finally和try-catch-finally如下:如果catch块因R原因突然终止,则执行finally块。然后有一个选择:- 如果finally块正常完成,则try语句因R原因突然终止。 - 如果finally块因S原因突然终止,则try语句因S原因突然终止(而R原因被丢弃)。finally块可能会抛出异常,如果是这样,则try或catch块抛出的任何异常都将丢失。参考:http://docs.oracle.com/javase/specs/jls/se7/html/jls-14.html#jls-14.20.2