日期:2014-05-20  浏览次数:20730 次

try中有return 和finally哪个先执行
Java code
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先执行呀?是不是我理解错了

------解决方案--------------------
finally最后执行,即使你先return了
------解决方案--------------------
函数遇到return,就已经返回了,但是返回的值保存在内存之中,所有要等整个函数执行完之后函数才真正的返回。看下面:
Java code

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最后执行,即使你先return了