package me.luger.base;public class FinallyReturnTest {
public static void main(String[] args) {
tt();
} // finally中的代码是必须要执行的,而且是在return前执行,除非碰到exit()。
static Return tt() {
try {
return new Return("try");
} catch (Exception e) {
e.printStackTrace();
} finally {
System.out.println("finally");
}
return new Return("outter");
}}class Return {
Return(String name) {
System.out.println("return " + name);
}
}
我在网上看的说是finally在return前执行 但是按我这么写的话是return先执行呀?是不是我理解错了

解决方案 »

  1.   

    finally最后执行,即使你先return了
      

  2.   

    函数遇到return,就已经返回了,但是返回的值保存在内存之中,所有要等整个函数执行完之后函数才真正的返回。看下面:
    public class Test { /**
     * @param args
     */
    public static void main(String[] args) {
    System.out.println(getString()); }
    static String getString(){
    try{
    return "SUCCESS";
    }catch(Exception e){

    }finally{
    System.out.println("Finally is executing");
    return "ERROR";//如果这句放在finally之外呢?
    }

    }
    }控制台打印的是:
    Finally executing
    ERROR
    当函数执行finally时,返回的"ERROR"覆盖了前面的"SUCCESS",但是如果将return "ERROR"
    移到finally之外,那么函数最后返回的也就是"SUCCESS"了。相应的,控制台打印的也就是:
    Finally executing
    SUCCESS
      

  3.   

    上面程序输出的是 
    return try
    finally