Java try catch返回值分析

简单分析异常捕获try catch的try和finally中return对结果的影响

try catch return

参考程序分析:

public class TryCatchTest {

    @Test
    public void testMethod() {
        int i = method1();
        System.out.println(i);
    }

    public int method1() {
        int a = 1;
        try {
            return ++a;
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            ++a;
        }
        return a;
    }
}

junit测试打印结果:2
分析:为什么打印的结果是2不是3呢?可以使用debug分析得出,在执行method1方法try中的++a之后(a的值为2,同时将返回值2保存到局部变量中),程序并没有立即执行return,而是紧接着执行了finally的++a(此时a的值为3),然后再执行try中的return(返回局部变量中的2);

若对程序进行改动,在finally中加入return分析返回值是多少?

public class TryCatchTest {

    @Test
    public void testMethod() {
        int i = method1();
        System.out.println(i);
    }

    public int method1() {
        int a = 1;
        try {
            return ++a;
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            return ++a;
        }
    }
}

此时,junit测试打印结果为:3
分析:当程序执行到finally中的++a (此时a的值为3),紧接着执行finally中的return;所以,try和finally中同时出现return时,try中的return将会失效;

题图来源:http://kuroeveryday.blogspot.jp/2014/12/Try-Catch-Finally.html