A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© shiweiCao 中级黑马   /  2013-5-16 22:03  /  1267 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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;
        }

}

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1

查看全部评分

1 个回复

倒序浏览
向这个问题论坛已经很多了

这跟try、catch、finally、return的执行顺序有关,在try语句中,在执行return语句时,要返回的结果已经准备好了,就在此时,程序转到finally执行了。在转去之前,try中先把要返回的结果存放到一个局部变量中去,执行完finally之后,再从中取出返回结果;因此,即使finally中对变量b进行了改变,但是不会影响返回结果。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马