14. try catch finally,try里有return,finally还执行么

2016/9/28 17:49 下午 posted in  Java comments

finally中的内容一定会执行的

try{
    return 0;
} catch(Exception e){
    return 1;
} finally{
    return 2;
}

finally中的return会覆盖try,catch中的return,所以最后返回的是finally中的值

class Main{
    public static String lem(){
        System.out.println("lem");
        return "return from lem";
    }
    
    public static String foo(){
        int x = 0;
        int y = 5;
        try {
            System.out.println("start try");
            int b = y/x;
            System.out.println("end try");
            return "return from try";
        } catch (Exception e) {
            System.out.println("catch");
            return lem() + "| return from catch";
        } finally {
            System.out.println("finally");
            return "return from finally";
        }
    }
    
    public static void main(String[] args) {
        String v = foo();
        
        System.out.println(v);
    }
}

输出:

start try
catch
lem
finally
return from finally