在try和finally中返回语句

时间:2014-02-04 07:26:00

标签: java try-catch

请检查以下代码并解释出行为:

    class ExceptionTest2 {
        int x = 5;

        public int TestMethod2() {
            try {
                x = x + 2;
                System.out.println("x value in try: " + x);
                return x;
            } catch (Exception e) {

            } finally {
                x = x + 3;
                System.out.println("x value in finally: " + x);
            }
            return x;
        }

    }

    public class ExceptionProg2 {

        public static void main(String[] args) {
            ExceptionTest2 test2 = new ExceptionTest2();
            int res = test2.TestMethod2();
            System.out.println("Res : " + res); // it should return 10 but returning 7.
        }

    }

这里返回7而不是10。

这是实际的o / p:

x value in try: 7
x value in finally: 10
Res : 7

为什么它的行为如此,当在finally块中更改x值并且'x'不是局部变量时。

请澄清我的疑问。

1 个答案:

答案 0 :(得分:1)

当X从try块返回时,该值存储在该方法的堆栈帧上,之后执行finally块。