try{}里有一个 return 语句,那么紧跟在这个 try 后的 finally {}里的 code 会 不会被执行,什么时候被执行,在 return 前还是后?...
这是一道面试题,首先finally{}里面的code肯定是会执行的,至于在return前还是后,
看答案说的是在return后执行,我觉得不对,百度了一下,有说return前的,有说return后的,还有return中间执行的。遂做了一个小测试如下:
static void Main(string[] args){//测试Test();System.Console.WriteLine("结束了");System.Console.ReadLine();}/// <summary>/// 测试/// </summary>/// <returns></returns>private static int Test(){try{System.Console.WriteLine("好,开始了");return ReturnInt();}catch (Exception exception){System.Console.WriteLine("我是异常");throw;}finally{System.Console.WriteLine("我是finally");}}/// <summary>/// 返回数字/// </summary>/// <returns></returns>private static int ReturnInt(){System.Console.WriteLine("我是return");return 1;}
测试结果如下:
所以我觉得finally{}里面的code是在return之后执行的。
此测试较粗糙,如有其它方法证明,望告知。
----------------------------------------------------------------------------------------------华丽的分割线-----------------------------------------------------------------------------------------------------------------------------------------------
之前的测试果然很粗糙,搞错了一个概念,return到底是在什么时候才算执行,什么时候执行完。上面打印“我是return”的时候,我以为是return执行完了,其实那个时候只是去准备return的返回值去了,并没有真正的返回“1”并跳出Test()方法,准备好返回值之后,接着去执行finally{}里面的code,打印了“我是finally”,最后Test()方法才算执行完,并真正的返回(return)“1”到main里面。
按照@以后会觉得昵称很幼稚 老哥的提醒,修改了一下main()里面的代码,
static void Main(string[] args){//测试Console.WriteLine("Test结果:" + Test());System.Console.WriteLine("结束了");System.Console.ReadLine();}
结果如下:
所以finally{}里面的code应该是在return之前执行的。
在http://bbs.csdn.net/topics/60474475 此贴中,五楼的老哥的话,“函数应该是栈调用,如果先执行return ,哪不是退到上个栈了,怎么调用finally, 所以我觉得先调用finally”,
在http://blog.csdn.net/gaoyuanfeng/article/details/4064388 文章中,finally与return的关系也讲得很明白了,这一天天的真是受教了。
转载于:https://www.cnblogs.com/bookobe/p/8491041.html
try{}里有一个 return 语句,那么紧跟在这个 try 后的 finally {}里的 code 会 不会被执行,什么时候被执行,在 return 前还是后?...相关推荐
- try{}里有一个return语句,那么紧跟在这个try后的finally{}里的...
这是一个很经典的面试题:try{}里有一个return语句,那么紧跟在这个try后的finally{}里的代码会不会被执行,是在return前还是后?话不多说,直接看代码: 运行结果为: 通过代码,可 ...
- try{}里有一个return语句,那么紧跟在这个try后的finally{}里的代码会不会被执行,是在return前还是后
一般答案:会执行,在方法返回调用前执行.准确的说是在return中间执行. 下面举个例子: public class Test {public static void main(String[] ar ...
- return语句的用法
1.return语句的作用:a.返回一个值,这个值可以是任意类型.b.使程序返回到操作系统(即终止程序) 2.java中对于一个函数,不论有没有返回值类型,都可以带有return 语句. 但是区别在于 ...
- finally块的return语句会覆盖其他语句的return
执行下列代码的输出结果是( ) public class Demo{public static void main(String args[]){int num = 10;System.out.pri ...
- 常见问题:try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候执行?
Java的异常机制主要依赖于try.catch.finally.throws.throw五个关键字.其中 try{可能引发异常的代码:} catch{处理这种异常的代码:} finally{回收在tr ...
- Try{}里有一个return语句,那么紧跟在这个try后面的finally{}里的code会不会执行,什么时候执行,在return之前还是之后?
Try{}里有一个return语句,那么紧跟在这个try后面的finally{}里的code会执行的. finally 语句总会执行,除非遇到一些特殊情况,如System.exit(0) return ...
- try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后?
try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后? 答:会执行,在return前执行 public c ...
- try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后
在return中间执行,代码示例 package com.mybatis.employee.test;public class Main {static int test(){int x = 1;Sy ...
- try{}里面有一个return语句,那么紧跟在这个try后的finally{}里的code会不会被执行,什么时候被执行,在return前还是后?
也许你的答案事在return之前,但往更细的说,我的答案事在return中间执行,请看下面程序代码的运行结果: 运行结果是1为什么呢?主函数调用子函数并得到结果的过程,好比主函数准备一个空罐子,当子函 ...
最新文章
- 计算机辅助教学导学设计研究,《计算机辅助教学》实验报告
- ubuntu下创建图标
- .NET 开源项目 StreamJsonRpc 介绍[上篇]
- Vue.js2.0开发环境搭建(二)
- 面向对象三大特性总结
- Yii2实现自定义独立验证器的方法
- WPS文字2013利用绘图工具中的形状裁剪出各式各样的图片
- cornerstone 加载dicom图像不同分辨率导致图像被截取的问题。
- 使用linux的MTD tests support测试flash性能
- 数据治理之——数据标准体系建设示例
- python如何调用函数三次_python中如何调用函数
- LoRa技术-什么是LoRa
- 解决beyond compare秘钥被吊销的问题
- 如何配置luogu,codeforces的spj(special judge)
- android设备怎么支持8021x,android WiFi ASSOC_REJECT 流程跟踪
- 数值分析——自适应辛普森积分
- 打造老年人的健康监测产品很有市场(随记)
- Week of 2.21
- 红米3用电信卡显示无服务器,红米3支持电信卡吗?红米3支持联通卡吗?
- 2017-2018-1(实变函数56, 点集拓扑56)