首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

try、catch、finally 施行顺序 及 return 关系浅谈一

2012-09-10 
try、catch、finally 执行顺序 及 return 关系浅谈一前段时间在逛论坛中,看到一贴子,1.若try中存在return 语

try、catch、finally 执行顺序 及 return 关系浅谈一

前段时间在逛论坛中,看到一贴子,1.若try中存在return 语句,finally 要不要执行呢?2.finally中对try return结果进行修改时返回什么数据呢?3.finally也存在return时,返回哪个return呢?

看过问题后,我也疑惑了,这些问题的答案究竟是什么呢?

于是有了这遍博文。先抛出经过测试验证的结论,等会读者可复制代码测试下:
结论:
1. finally 里 始终会被执行到, System.exit(0); 除这种被执行外。即使是发现了异常,如(3)中被注释的throw 异常,也会在抛异常前先执行finally.
2. 即使try中有return ,也是先执行 return 后面的语句完了之后,不立马return,而是去执行finally中的语句。
3. 当try中与finally里,同时出现return , 则只会返回 finally 中的return 结果。
4. finally中的值不能影响try中 即将返回的结果值。
以上对try中与finally中的结论,同样适用于catch 与 finally里,
1. finally 里 始终会被执行到, System.exit(0); 除这种被执行外。即使是发现了异常,如(3)中被注释的throw 异常,也会在抛异常前先执行finally.
2. 即使catch中有return ,也是先执行 return 后面的语句完了之后,不立马return,而是去执行finally中的语句。
3. 当catch中与finally里,同时出现return, 则只会返回 finally 中的return 结果。
4. finally中的值不能影响catch中 即将返回的结果值。

注意: 若finally中没有return 在 try或catch中有return ,那么在执行return 跟着语句之后,会把语句的结果新开辟一内存空间,直接把结果的存放此内存空间中。所以,finally中的值不能影响try或catch中即将return的结果。

具体验证代码如下:

class DataDemo{ private int num = 0; private String location ; public DataDemo(int num,String location){  this.num = num;  this.location = location;  System.out.println("------ "+location+" Person can execute---------- num="+num);  } public String toString(){   return "{DataDemo num=["+num+"]+ location=["+location+"]" ; }}


public class TryCatchFinallyTest{ public static void main(String[] args) throws Exception{   System.out.println("client execute1 ------"+TestTry()); } public static DataDemo  testTry() throws Exception{  int i = 1;   try{   //throw new Exception();    //System.exit(0);      return new DataDemo(++i,"try1"); //(1) 若finally中存在return DateDemo则此return无效。若finally中只对返回的return有修改,比如这里返回的是return i,而后面的finally中有修改++i的,最后此方法只会返回0,而不是返回1      }catch(Exception e){   System.out.println(" catch run --------, this can not possible"); // (2)   //throw e ;   return new DataDemo(i,"catch1"); // (3)  }finally{   ++i;     new DataDemo(i,"finally1"); // (4)    } }}


热点排行