首先说明下:网上大多说法(finally块会执行,并都会在return之前执行)都是错误的。
package cn.yu.test001;
/**
 * 
 * Created by myeclipse8.5.
 * User: @author yu
 * Time: 2011-4-19 
 * Company: 天极传媒集团
 * Descripion: 测试
 */
public class testReturn {
    public static int test() {
        try {
            return fun1();
        } catch (Exception e) {
        } finally {
            return fun2();
        }
    }
    public static int fun1() {
        System.out.println("fun1被执行了");
        System.out.println("fun1的确被执行了,返回么?");
        return 1;
    }
    public static int fun2() {
        System.out.println("fun2被执行了");
        System.out.println("fun2的确被执行了,返回么?");
        return 2;
    }
    public static void main(String[] args) {
        System.out.println(testReturn.test());
    }
}
结果:fun1被执行了
      fun1的确被执行了,返回么?
      fun2被执行了
      fun2的确被执行了,返回么?
      2
证明什么?finally并没有在之前执行,第一个执行的还是try里面的内容但是没有立刻返回,等待执行finally,当finally返回结果后执行完毕。
并不是网上大多数的说法
还有要说明下 如果finally里面没有返回值,则返回try里面的返回值。