try和finally中都有return语句,执行哪一个return?
来源:互联网 发布:域名中国 编辑:程序博客网 时间:2024/04/30 14:09
1.首先要确定的一点是,不管有木有出现异常,finally块中代码都会执行
2、当try和catch中有return时,finally仍然会执行;
3、finally是在return后面的表达式运算后执行的(此时并没有返回运算后的值,而是先把要返回的值保存起来,管finally中的代码怎么样,返回的值都不会改变,任然是之前保存的值),所以函数返回值是在finally执行前确定的;
4、finally中最好不要包含return,否则程序会提前退出,返回值不是try或catch中保存的返回值。
return语句的执行过程:
return语句的格式如下:
return [expression];
其中expression(表达式)是可选的,因为有些方法没有返回值,所以return后面也就没有表达式,或者可以看做是空的表达式。
我们知道return语句的作用可以结束方法并返回一个值,那么他返回的是哪里的值呢?返回的是return指令执行的时刻,操作数栈顶的值,不管expression是一个怎样的表达式,究竟做了些什么工作,对于return指令来说都不重要,他只负责把操作数栈顶的值返回。
而return expression是分成两部分执行的:
执行:expression;
执行:return指令;
例如:return x+y;
这句代码先执行x+y,再执行return;首先执行将x以及y从局部变量区复制到操作数栈顶的指令,然后执行加法指令,这个时候结果x+y的值会保存在操作数栈的栈顶,最后执行return指令,返回操作数栈顶的值。
对于return x;先执行x,x也是一个表达式,这个表达式只有一个操作数,会执行将变量x从局部变量区复制到操作数栈顶的指令,然后执行return,返回操作数栈顶的值。因此return x实际返回的是return指令执行时,x在操作数栈顶的一个快照或者叫副本,而不是x这个值。
如果try和finally语句里面都有return,会执行哪一个呢?
首先,在程序没有异常的情况下,首先执行到try里面的语句,但是只执行到了return里面的expression,expression首先存放在操作数栈顶,然后复制到局部变量区,并没有执行返回语句return(执行返回语句通常意味着程序执行结束)。然后执行finally,当执行到finally里面的return时候,会将return语句执行完整,此时程序已经有了返回值,因为,执行结束。
总结:执行try块,执行到return语句时,先执行return的语句,但是不返回到main 方法,接下来执行finally块,遇到finally块中的return语句,执行,并将值返回到main方法,这里就不会再回去返回try块中计算得到的值
- try和finally中都有return语句,执行哪一个return?
- try中有return语句,先执行return还是finally,执行顺序怎样的
- java try语句块 finally和return 的执行顺序
- try...catch...finally中的执行顺序和return语句 总结
- try-catch语句中return和finally执行顺序详解
- 当try和finally中都有return的时候,结果是什么?
- java try return 和finally return 执行顺序证明
- try/catch中有return语句finally是否被执行,什么时候执行?
- 如果try块里面有return语句,后面finally块里的语句什么时候执行?
- 【Java基础之finally和return】有return的情况下try catch finally的执行顺序
- 含有return语句的try-catch-finally语句执行顺序
- try中return语句与finally语句执行顺序
- try{}中有return 时,finally中的语句是否会执行问题。
- return语句在try-catch-finally中的执行顺序
- return语句在try-catch-finally中的执行顺序
- try中return语句与finally块的执行先后
- 关于try-catch-finally-return语句的执行顺序
- 浅析Java try....catch....finally中return语句执行顺序
- Android自定义动画三-SVG动画
- 一个继承自RelativeLayout的输入法监听布局
- 持续集成开发环境搭建
- 处理日期/时间的类
- 利用HEXO和Github,搭建属于自己的博客
- try和finally中都有return语句,执行哪一个return?
- 华为-简单错误记录-Java
- 170702 逆向-IOS(失败)
- Unity动画,状态机的使用
- 第七章 SpringMVC高级的技术 笔记1
- How to Use Densities for Controls
- SpringMVC框架介绍
- 基于贝叶斯的垃圾邮件过滤器 JAVA
- Oracle数据库入门