黑马程序员技术交流社区

标题: finally里面的代码到底是在return之前执行还是在之后执行的啊? [打印本页]

作者: guangjuner    时间: 2016-9-22 23:18
标题: finally里面的代码到底是在return之前执行还是在之后执行的啊?
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;
                }
        }

}
作者: 名字被注册了    时间: 2016-9-22 23:36
这个try里面的return先执行,但是只是返回方法进行封装,等待执行完finally才返回调用,接下来还要执行finally里面的内容,虽然finally修改了x的值但是这个修改是无效的修改,不能修改已经被方法接收的return,所以答案是:10
作者: CreScert    时间: 2016-9-22 23:39
之前啊,肯定之前啊。不行去调试里的透视图看看就知道啦
作者: guangjuner    时间: 2016-9-22 23:43
名字被注册了 发表于 2016-9-22 23:36
这个try里面的return先执行,但是只是返回方法进行封装,等待执行完finally才返回调用,接下来还要执行fina ...

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

还真是哈,我应该去走一遍debug,谢谢啦{:3_57:}
作者: 姜磊_gJzPh    时间: 2016-9-23 00:04
前前前前前前前前前前前前前前前前前前
作者: chenhao597    时间: 2016-9-23 00:07
这个问题本身就是坑...
在此感谢明哥教诲
1.如果finally在return执行之后执行,那么return的作用是结束方法,方法都结束了?finally还会执行?
2.如果finally在return执行之后执行,那么x的值应该是20才对,可是为什么x的值还是10呢?

所以说finally的作用是释放资源关闭流,不要在里面写赋值语句之类的操作
作者: yu244934256    时间: 2016-9-23 00:19
finally最好适合关闭流




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