a我考网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 84|回复: 1

[其他] JAVA心得:浅谈Java程序异常处理的特殊情况

[复制链接]
发表于 2012-8-4 12:28:23 | 显示全部楼层 |阅读模式
  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 {
回复

使用道具 举报

 楼主| 发表于 2012-8-4 12:28:24 | 显示全部楼层

JAVA心得:浅谈Java程序异常处理的特殊情况

  return true; // 第4步. 控制转移,直接返回,吃掉了异常
7 o0 Y9 C5 t4 O0 S! o. ]  }
! S! D0 c; x* e" q( q8 P4 L& h  }
- P5 {2 ^$ F6 U3 {) y% f' T  public static void doThings(int i)
9 ~" \+ J& ?) l5 G1 B! `  {
8 [/ I. y5 I/ @5 \  try
% p& B; o' o2 a- R/ r1 N, b  {+ D2 D  O6 {7 d, Z4 E% \
  if(i==0)
, B: k1 x) H$ L- ~  {* y1 K) a4 N  J) N' s
  //在执行return之前会先执行finally
7 K: J9 P2 @1 X' C' B" `  return;0 |% N* G9 N6 @
  }
! T! x0 c. Q* q: r  int t=100/i;
9 p, g2 `4 @+ f  _, U6 f  System.out.println(t);
2 B9 F! N/ g5 I$ b; W- q7 }  }catch(Exception ex)
/ {# t+ {3 K3 Y+ m2 }: x! o" Y  {; [1 u  k# X9 g- T- z5 i
  ex.printStackTrace();
6 G& v1 t, q% q+ @) ?3 v  }
! g; a0 G5 Q8 P) [* P' R& H8 }  finally: n9 `! J/ ~3 [* g
  {! J( M5 R' f. Y1 a5 }; f4 Y2 D
  System.out.println("finally");
7 T. M; |4 t& K0 o% s" G  }
4 M1 u4 E5 T3 t8 E0 M  }. h9 z1 E2 s( V/ p' ~
  }
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Woexam.Com ( 湘ICP备18023104号 )

GMT+8, 2024-5-22 05:38 , Processed in 0.192046 second(s), 23 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表