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:
- 异常也是一个变量
- finally在无异常的情况会在执行完try里面代码块以后执行,但是返回值