一般答案:会执行,在方法返回调用前执行。准确的说是在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正对该局部变量操作会对原对象产生影响。

 
如果我在finally里最后加上一句return i;那么最后的结果是2,因为上面说用栈保存的值,那这个结果我可不可以理解为:因为栈是先进后出的结构嘛,所以当2压入栈中的时候是在栈顶,所以输出的是栈顶的值也就是2.
最终总结:return语句会先压入栈里面,最后执行finally语句(有return语句,值压入栈中),最后弹出栈顶元素。
转自:http://blog.sina.com.cn/s/blog_4cef5c7b0102wf9m.html

try{}里有一个return语句,那么紧跟在这个try后的finally{}里的代码会不会被执行,是在return前还是后相关推荐

  1. try{}里有一个return语句,那么紧跟在这个try后的finally{}里的...

    这是一个很经典的面试题:try{}里有一个return语句,那么紧跟在这个try后的finally{}里的代码会不会被执行,是在return前还是后?话不多说,直接看代码: 运行结果为: 通过代码,可 ...

  2. 常见问题:try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候执行?

    Java的异常机制主要依赖于try.catch.finally.throws.throw五个关键字.其中 try{可能引发异常的代码:} catch{处理这种异常的代码:} finally{回收在tr ...

  3. Try{}里有一个return语句,那么紧跟在这个try后面的finally{}里的code会不会执行,什么时候执行,在return之前还是之后?

    Try{}里有一个return语句,那么紧跟在这个try后面的finally{}里的code会执行的. finally 语句总会执行,除非遇到一些特殊情况,如System.exit(0) return ...

  4. try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后?

    try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后? 答:会执行,在return前执行 public c ...

  5. try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后

    在return中间执行,代码示例 package com.mybatis.employee.test;public class Main {static int test(){int x = 1;Sy ...

  6. try{}里有一个return语句,那么紧跟在这个try后的finally{}里的代码会不会被执行,什么时候被执行,在return前还是后?

    会在return中间执行! try 中的 return 语句调用的函数先于 finally 中调用的函数执行,也就是说 return 语句先执行,finally 语句后执行,但 return 并不是让 ...

  7. try {}里有一个 return 语句,那么紧跟在这个 try 后的 finally {}里的 code 会不会被执行,什么时候被执行,在 return 前还是后?

    会在return中间执行! try 中的 return 语句调用的函数先于 finally 中调用的函数执行,也就是说 return 语句先执行,finally 语句后执行,但 return 并不是让 ...

  8. try{}里有一个return语句,那么紧跟在这个try后的finally{}里的代码会不会被执行

    转载自https://blog.csdn.net/jackfrued. 在finally中改变返回值的做法是不好的,因为如果存在finally代码块,try中的return语句不会立马返回调用者,而是 ...

  9. try{}里有一个 return 语句,那么紧跟在这个 try 后的 finally {}里的 code 会 不会被执行,什么时候被执行,在 return 前还是后?...

    这是一道面试题,首先finally{}里面的code肯定是会执行的,至于在return前还是后, 看答案说的是在return后执行,我觉得不对,百度了一下,有说return前的,有说return后的, ...

最新文章

  1. MITRE:利用微生物组时间序列数据推断与宿主状态变化相关的特征
  2. 持续集成工具 Jetbrains TeamCity 简介
  3. DSP学习--BCC校验(异或校验)
  4. 关于cocostudio动态添加控件触摸响应无效的学习
  5. Debug enterprise search menu
  6. [Java] 蓝桥杯PREV-33 历届试题 兰顿蚂蚁
  7. 2015年蓝桥杯省赛A组c++第4题
  8. 日常学习随笔-数组、单链表、双链表三种形式实现队列结构的基本操作(源码注释)...
  9. 计算机蓝屏 代码0000a,win7 64位系统蓝屏代码0x0000000a的原因及解决方法
  10. BlackBerry7290上网步骤
  11. 笔试题目——研发工程师笔试题
  12. Protocol Buffer 简介
  13. RT-Thread Nano入门学习笔记(2)
  14. 学会计学java_我只是一个初中毕业的,现在很想学会计,我不知道从何学起?...
  15. 《娱乐至死》读书笔记(part1)--深入一种文化的最有效途径是了解这种文化中用于会话的工具
  16. ios 真机运行:The app ID cannot be registered to your development team
  17. 免费的计算机一级操作系统,计算机一级题题库,第二章操作系统
  18. 关于硬盘分区合并的事
  19. http://localhost/myphpsite/index.php
  20. 【windows下直接把文件打包成war包】

热门文章

  1. 网络安全规范(范例)
  2. Vue element 日期获取展示今天日期
  3. Oracle - 锁
  4. java项目:基于springboot+vue的实验室预约管理系统 nodejs
  5. Java面试官:java高级工程师简历csdn
  6. python 白噪声检验-python之时间序列分析(一)
  7. 如何用python语言解一元二次方程式
  8. python保存图片格式_python 存储网页图片格式
  9. 微信公众号发布消息不消耗群发次数怎么实现
  10. 2022.02.16【读书笔记】|基于深度学习的生命科学 第2章 深度学习概论(下)