A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 陈培果 于 2014-5-10 08:54 编辑
  1. public class Test6 {

  2.         public static void main(String[] args) {
  3.                 System.out.println(test());
  4.         }

  5.         public static String test() {
  6.                 String x = "try";
  7.                 try {
  8.                         return x;

  9.                 } finally {
  10.                         x = "finally";
  11.                 }
  12.         }

  13. }
复制代码


评分

参与人数 1技术分 +1 收起 理由
张然龙 + 1

查看全部评分

6 个回复

倒序浏览
finally代码是一定会执行的代码。
System.exit(0); //退出jvm,只有这种情况finally不执行。
回复 使用道具 举报
skill20 发表于 2014-5-9 22:55
finally代码是一定会执行的代码。
System.exit(0); //退出jvm,只有这种情况finally不执行。 ...

我知道fillally会一定执行,但是我想知道return和finally谁先执行。
回复 使用道具 举报
教你一个方法,在一个有返回值的函数里测试,例如return个字符串,然后在主函数里打印他,在之前的函数里finally{
Thread.sleep(3000);
System.out.println(finally Run);


酱紫就知道了
回复 使用道具 举报
过程如下:

return语句运行 -->  结果被临时保存 --> finally语句执行  -->  临时保存的结果返回给函数调用者

所以finally语句是无法影响到return语句中返回的结果的。

评分

参与人数 1技术分 +1 收起 理由
张然龙 + 1

查看全部评分

回复 使用道具 举报
蓝雨星空 发表于 2014-5-10 08:49
过程如下:

return语句运行 -->  结果被临时保存 --> finally语句执行  -->  临时保存的结果返回给函数调 ...

哦哦,这样的啊,也就是说人return先运行是吧。
谢谢
回复 使用道具 举报
Kael 初级黑马 2014-5-10 12:55:04
7#
除非在try块、catch块中调用了退出虚拟机的方法,否则不管在try、catch块中执行什么样的代码,出现什么样的情况,异常处理的finally块总会被执行。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马