try{}里有一个return语句,那么紧跟在这个try后的finally{}里的代码会不会被执行,是在return前还是后
一般答案:会执行,在方法返回调用前执行。准确的说是在return中间执行。
下面举个例子:
public class Test {public static void main(String[] args) {System.out.println("结果: " + new Test().test());}static int test(){int i = 1;try {System.out.println("try里面的i : " + i);return i;}finally{System.out.println("进入finally...");++i;System.out.println("fianlly里面的i : " + i);//return i;}}
}
结果是:try里面的i : 1
进入finally...
fianlly里面的i : 2
结果: 1
结果是1,并不是大家想象的结2。相关解释如下:
上面我认为比较靠谱的一种解释。
还有一种解释为:
主函数调用子函数并得到结果的过程,好比主函数准备一个空罐子,当子函数要返回结果时,先把结果放在罐子里,然后再将程序逻辑返回到主函数。所谓返回,就是子函数说,我不运行了,你主函数继续运行吧,这没什么结果可言,结果是在说这话之前放进罐子里的。
从C#(我是C#) 局部变量和函数返回值的存储方式来理解,
他们都存储在堆栈(一种先进后出的结构)上,在上述函数返回的时候,会将返回值压入堆栈栈顶,相当于堆栈中现在有两个相同的值,而finally 使用的是之前的局部变量的值,所以finally操作不会对 返回值产生影响。
说到这里,如果原局部变量是一个引用类型,在try 中叶返回引用,那么堆栈中会有两个引用,但是实际指向同一个对象,这时候在finally正对该局部变量操作会对原对象产生影响。
try{}里有一个return语句,那么紧跟在这个try后的finally{}里的代码会不会被执行,是在return前还是后相关推荐
- try{}里有一个return语句,那么紧跟在这个try后的finally{}里的...
这是一个很经典的面试题:try{}里有一个return语句,那么紧跟在这个try后的finally{}里的代码会不会被执行,是在return前还是后?话不多说,直接看代码: 运行结果为: 通过代码,可 ...
- 常见问题: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{}里的代码会不会被执行,什么时候被执行,在return前还是后?
会在return中间执行! try 中的 return 语句调用的函数先于 finally 中调用的函数执行,也就是说 return 语句先执行,finally 语句后执行,但 return 并不是让 ...
- try {}里有一个 return 语句,那么紧跟在这个 try 后的 finally {}里的 code 会不会被执行,什么时候被执行,在 return 前还是后?
会在return中间执行! try 中的 return 语句调用的函数先于 finally 中调用的函数执行,也就是说 return 语句先执行,finally 语句后执行,但 return 并不是让 ...
- try{}里有一个return语句,那么紧跟在这个try后的finally{}里的代码会不会被执行
转载自https://blog.csdn.net/jackfrued. 在finally中改变返回值的做法是不好的,因为如果存在finally代码块,try中的return语句不会立马返回调用者,而是 ...
- try{}里有一个 return 语句,那么紧跟在这个 try 后的 finally {}里的 code 会 不会被执行,什么时候被执行,在 return 前还是后?...
这是一道面试题,首先finally{}里面的code肯定是会执行的,至于在return前还是后, 看答案说的是在return后执行,我觉得不对,百度了一下,有说return前的,有说return后的, ...
最新文章
- MITRE:利用微生物组时间序列数据推断与宿主状态变化相关的特征
- 持续集成工具 Jetbrains TeamCity 简介
- DSP学习--BCC校验(异或校验)
- 关于cocostudio动态添加控件触摸响应无效的学习
- Debug enterprise search menu
- [Java] 蓝桥杯PREV-33 历届试题 兰顿蚂蚁
- 2015年蓝桥杯省赛A组c++第4题
- 日常学习随笔-数组、单链表、双链表三种形式实现队列结构的基本操作(源码注释)...
- 计算机蓝屏 代码0000a,win7 64位系统蓝屏代码0x0000000a的原因及解决方法
- BlackBerry7290上网步骤
- 笔试题目——研发工程师笔试题
- Protocol Buffer 简介
- RT-Thread Nano入门学习笔记(2)
- 学会计学java_我只是一个初中毕业的,现在很想学会计,我不知道从何学起?...
- 《娱乐至死》读书笔记(part1)--深入一种文化的最有效途径是了解这种文化中用于会话的工具
- ios 真机运行:The app ID cannot be registered to your development team
- 免费的计算机一级操作系统,计算机一级题题库,第二章操作系统
- 关于硬盘分区合并的事
- http://localhost/myphpsite/index.php
- 【windows下直接把文件打包成war包】