1、不能在finally块中执行return,continue等语句,否则会把异常“吃掉”;& k& R M- r/ c, Y! k8 q/ N4 c# z
2、在try,catch中如果有return语句,则在执行return之前先执行finally块 e% d/ B- R( M8 c
请大家仔细看下面的例子:
- t) J% I j2 A& ]1 ]/ f$ } 以下是引用片段:) k7 X: f( |5 Y' \
public class TryTest {
) j0 ?4 J5 t+ Y5 [3 O+ r4 D6 ~' o public static void main(String[] args) {
) M; q7 X) x& U, `5 X try {7 g' G& I P) N& I
System.out.println(TryTest.test());// 返回结果为true其没有任何异常$ R* }" w% ~; }2 r
} catch (Exception e) {0 l8 ?$ Z9 e# |) }( Y
System.out.println("Exception from main");
4 K* \8 ~7 i* z" X; C+ @+ F9 j e.printStackTrace();0 H5 j' N( ?6 Y2 k
}' x- _# b: ?& |% h# l# Y$ e# y) B
doThings(0);* c& |( y6 H% V! x! w
}4 h% @! K7 A, B4 ?. r# g2 |6 O1 M
public static boolean test() throws Exception {
' v1 S& G) |# ^; m try {
+ |, E9 @' Z5 Q throw new Exception("Something error");// 第1步.抛出异常
/ l. J9 T3 Y# w: J! _0 r } catch (Exception e) {// 第2步.捕获的异常匹配(声明类或其父类),进入控制块& y. O4 O& t" ?
System.out.println("Exception from e");// 第3步.打印" q+ F2 I& ~; S" M" v _
return false;// 第5步. return前控制转移到finally块,执行完后再返回(这一步被吃掉了,不执行)5 d; ~8 ?$ `3 h G
} finally { |