Java当finally遇到return
return步骤:
1.计算返回值(如果有)
2.保存返回值到调用栈中(基本数据类型或者引用地址)
(如果return 在try或者catch模块中,并且有finally,保存返回值到调用栈中后会先执行finally模块内容,finally模块相当与一个新的栈帧,会使用前面的局部变量;如果finally块中有一个return语句,也会导致方法返回)
3.跳转到调用者
4.调用者继续执行,执行return后其他代码
5.资源回收
基于上面步骤可以得到结论:
1.只要有finally不管有没有return,不管有没有catch 都会执行
2.如果finally之前没有return,则finally可以修改返回值
3.如果finally之前有return,则finally执行不会影响调用栈保存的返回数据;但是对于引用数据类型可以改属性
4.如果finally中有return,则该return会更新覆盖前面的调用栈中保存的数据,所以一般不在finally中return

浙公网安备 33010602011771号