return和finally
老师,在4-10的代码里,try和catch、finally块里都写有return。我的问题是:
1、return,我记得在以前的学习里,一旦出现它,return所在的方法结束执行。按照我的理解,try和catch里执行了自己的对应的return,finally就不会被执行,为什么finally像是得了强迫症那样,一定会被执行呢?
2、是因为finally写有retrun,而finally是强迫症患者,必须得执行,所以才忽略了try和catch中的return吗?
3、return怎么知道要返回到int result=test();呢?
正在回答
方法执行时,会根据语句改变栈中的值。
当执行return语句时,值才会存入寄存器中。
当return语句在finally中时,a在栈中,寄存器中值都为2。
如果我的回答解决了你的疑惑,请采纳。祝:学习愉快~
同学你好,1、finally是与try-catch配合使用的哦!finally是无论try或catch执行或不执行都会执行finally中的内容!这是finally的特性,所以finally是一定会执行的哦!
2、并没有忽略try和catch中的return语句哦!例如:
public class java_try_catch { public static void main(String[] args){ System.out.println(method()); } public static int method(){ int a = 1; try{ throw new Exception(); }catch(Exception e) { System.out.println("catch : a = " + a); return a; }finally{ a = 2; System.out.println("finally : a = " + a); } } }
最后的运行效果是:
这是因为变量 a 存放在栈中并赋值为1,try抛出异常,运行 catch 语句块。当运行到 return a 时,将 a 的值放入到寄存器,并执行 finally 语句块。而在 finally 中只是改变了栈中 a 的值,很显然寄存器中的值不会受到影响。因此,等 finally 语句块执行完后,主函数接收的是寄存器的值 1 。
可以参考如下图的理解:
3、int result=test();中在主方法中调用test静态方法,而test方法是有返回值的,在try和catch中都有对应的return的返回值,所以调用test方法用result变量来接收返回值,所以是通过调用test方法来得到return的返回值,而不是return知道要返回到int result=test();这条语句中!
如果我的回答解决了你的疑惑,请采纳。祝:学习愉快~
- 参与学习 人
- 提交作业 3802 份
- 解答问题 11489 个
本阶段带你迈入Java世界,学习Java必备基础知识,基础语法、面向对象思想以及常用工具类的使用。
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星