finally执行顺序

    public class Test {
        public int getX() {
            int x;
            try {
                x = 7;
                return x;
            } catch (Exception e) {
                x = 8;
                return x;
            } finally {
                x = 9;
                // 接下来看注释与不注释的区别
                return x;
            }
        }
    }

写java的也许得到正确的结果不难,但我们的目标是知道为什么会这样?

我的疑问点其实就是在finally如果不加上return那一行,为什么返回7,通过调试我们可以看到执行顺序是赋值7,然后复制9,然后返回。为什么最后变为了7。

我们其实可以通过查看字节码文件得到问题的原因

字节码

有return

无return

tips:

  1. 异常也是一个变量
  2. finally在无异常的情况会在执行完try里面代码块以后执行,但是返回值

链接

https://blog.csdn.net/u012070360/article/details/81624854

猜你喜欢

转载自www.cnblogs.com/colin-xun/p/11772787.html