Favor Soup | 反胃书屋

斯是陋室,惟吾德馨。
posts - 34, comments - 18, trackbacks - 0, articles - 0
  IT博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

当Return遇到Finally(ZZ)

Posted on 2007-10-23 17:34 D主 阅读(145) 评论(0)  编辑 收藏 引用 所属分类: Java Related

最近研究Java,发现很多有趣的事情。今天又是一例。
先看代码(注意第5行和第8行的两个”return”)

  1. public class TestClass{
  2.     public int test(){
  3.         try{
  4.             System.out.println("step1");
  5.             return 1;
  6.         }finally{
  7.             System.out.println("step2");//会执行吗?
  8.             return 2;
  9.         }
  10.     }
  11.     public static void main(String[] args){
  12.         TestClass te=new TestClass();
  13.         int t=te.test();
  14.         System.out.println(t);
  15.     }
  16. }

按理说,一个方法执行到return就应该返回,但是按照Java的规范,finally中的代码又是一定要被执行的。
先看看上面这个程序的运行结果:

step1
step2
2

可以看到,虽然在try块中遇到了return,但finally中的代码仍然被执行了。test()方法的返回值最终为2。

那么try块中的return语句没有用吗?不是的。
如果你注释掉第8行,即finally中的return语句,你会发现test方法最终会返回1。结果如下:

step1
step2
1

发散一下,如果我在catch中返回一个值,同时也在finally中加入一个return语句,结果会怎么样呢?
答案是:现象相同。catch中的return和finally中的return都会执行。有兴趣的可以试试。

只有注册用户登录后才能发表评论。