首先说明下:网上大多说法(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里面的返回值。