Loading, please wait...

Friday, April 3, 2009

原来java中try - catch - finally的执行是这样的.

以前对java中try-catch-finally总是一知半解,今天看到憨厚生博客关于try catch finally一点疑惑的讨论,才大开眼界.
public int test1(){
   int i=4;
   try{
       return i;
   }finally{
       i=0;
      System.out.println("---test----");
   }
}// 返回4
public int test2(){
   int i=4;
   try{
      return i;
   }finally{
      i=0;
      System.out.println("---test----");
      return i;
   }
}//返回0
注意两个方法的返回值.
按jbahamut的说法
return 压栈,执行finally,方法返回
第一个test中return压栈后,栈中的值没有变,所以返回4 
finally总是被执行的,如此在finally中的某些操作是非常危险的.如Fingki.li所说.
finally块里尽量避免使用return,会吃掉exception.
今天真是上了一课,以前还自以为在finally中使用return很不错,原来犯了这么大的忌讳.

转载声明: 出自: Ghoul To World!作者: GreatGhoul

No comments:

Post a Comment

Note: Only a member of this blog may post a comment.