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

今天发现异常的一个问题,求权威解释~
Java code

    public static int test() {
        int i = 0;
        try {
            fun1();
            fun2();
            i = -1;
            System.out.println("try end");
            return i;
        } catch (Exception e) {
            System.out.println("catch");
            i = -2;
            return i;
        } finally {
            i = 1;
            System.out.println("finally");
        }
    }


以上代码正常执行返回-1,fun1、fun2抛异常,返回-2
但在单步调试的时候看到在返回之前已经进入了finally里面,而且把i的值改为了1,可方法返回后还是原来的值(-1或者-2),求解~

------解决方案--------------------
} catch (Exception e) {
System.out.println("catch");
i = -2;
return i;
} finally {
i = 1;
System.out.println("finally");
}


在return i;之前 ,先把i放到一个临时变量中 ,然后 运行 finally部分代码 ,接着 返回临时变量。
------解决方案--------------------
http://topic.csdn.net/u/20120607/07/9d3a5948-ca38-4eb9-a4f8-63400b34e13a.html