黑马程序员技术交流社区

标题: 关于finally与return的小问题 [打印本页]

作者: shiweiCao    时间: 2013-5-16 22:03
标题: 关于finally与return的小问题
package cn.itcast;
public class FinallyDemo {
        public static void main(String[] args) {
                int result = fun();
                System.out.println(result);
        }
        public static int fun(){
                int i=1;
                try {
                        i++;
//                        执行i++后抛出异常
                        System.out.println(10/0);
                } catch (Exception e) {
//                        捕获异常后,输出i为2
                        System.out.println(i);
//                        然后此处有return,本应该返回i并跳出方法了,但还有finally
                        return i;
                }
//                那就先执行finally,i++ 然后输出i为3 最后再执行catch中的return 返回i为2; 所以最后的结果为 232,有换行的.
                finally{
                        i++;
                        System.out.println(i);
                }
//                这里的return无效,混淆视听的. 如果finally中有return的话 那就执行finally中的return 返回值为3, 不执行catch中的了
//                并且java中格式极严,finally中有return,此处的return还写的话直接就报错了
                return i;
        }

}

作者: hou604720966    时间: 2013-5-16 22:25
向这个问题论坛已经很多了

这跟try、catch、finally、return的执行顺序有关,在try语句中,在执行return语句时,要返回的结果已经准备好了,就在此时,程序转到finally执行了。在转去之前,try中先把要返回的结果存放到一个局部变量中去,执行完finally之后,再从中取出返回结果;因此,即使finally中对变量b进行了改变,但是不会影响返回结果。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2