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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

guangjuner

初级黑马

  • 黑马币:26

  • 帖子:13

  • 精华:0

public class Test {

        public static void main(String[] args) {
                System.out.println(method(10));
        }

        private static int method(int x) {
               
                try{
                       
                        return x;
                }finally{
                        x = 20;
                }
        }

}

7 个回复

倒序浏览
这个try里面的return先执行,但是只是返回方法进行封装,等待执行完finally才返回调用,接下来还要执行finally里面的内容,虽然finally修改了x的值但是这个修改是无效的修改,不能修改已经被方法接收的return,所以答案是:10
回复 使用道具 举报
CreScert 来自手机 中级黑马 2016-9-22 23:39:42
藤椅
之前啊,肯定之前啊。不行去调试里的透视图看看就知道啦
回复 使用道具 举报
名字被注册了 发表于 2016-9-22 23:36
这个try里面的return先执行,但是只是返回方法进行封装,等待执行完finally才返回调用,接下来还要执行fina ...

恩,看完你回答的,我感觉瞬间明白了一些,就像是发快递的过程,要发出去的物品已经被包装好了,但是还没发出去,里面的东西也是不能被修改的了。finally执行完就相当于把快递包裹发出了,物品还是没变的!{:3_57:}
回复 使用道具 举报
CreScert 发表于 2016-9-22 23:39
之前啊,肯定之前啊。不行去调试里的透视图看看就知道啦

还真是哈,我应该去走一遍debug,谢谢啦{:3_57:}
回复 使用道具 举报
前前前前前前前前前前前前前前前前前前
回复 使用道具 举报
这个问题本身就是坑...
在此感谢明哥教诲
1.如果finally在return执行之后执行,那么return的作用是结束方法,方法都结束了?finally还会执行?
2.如果finally在return执行之后执行,那么x的值应该是20才对,可是为什么x的值还是10呢?

所以说finally的作用是释放资源关闭流,不要在里面写赋值语句之类的操作
回复 使用道具 举报
finally最好适合关闭流
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马