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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

public static void main(String[] args) {
                System.out.println(new Test8().returnTest());
        }

        public int returnTest() {
                int i = 2;
                try {
                        System.out.println("遇到return后面语句块不被执行 跳出try执行finally");
                        return i;
                }

                finally {
                        System.out.println("先执行了" + ++i);
                }
       

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 赞一个!

查看全部评分

7 个回复

倒序浏览
你的问题是:
当try 中有 return 语句,程序会不会跳出 try...finally 语句。

从这个例子中不难看出,try...finally这种语句,不管怎样最终都是会执行到finally 的。

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 赞一个!

查看全部评分

回复 使用道具 举报
为什么先执行finally 然后才输出return后i的值
回复 使用道具 举报

你的运行结果是:遇到return后面语句块不被执行 跳出try执行finally
先执行了3
确实是先执行的try,然后就返回了i的值,被finally里面的打印语句记录并打印出来了,我想你是把return的功能搞错了,他是返回值,可是并不能出现什么效果
回复 使用道具 举报
public int returnTest()
        {
                int i = 2;
                try
                {
                        System.out.println("遇到return后面语句块不被执行 跳出try执行finally");
                        System.out.println("i="+i);//这里的i = 2;
                        return i;
                }

                finally
                {
                        System.out.println("先执行了" + ++i);
                }

        }


我在你的代码里return的前面加了一句话输出i的值,打印的结果是:

遇到return后面语句块不被执行 跳出try执行finally
i=2
先执行了3

也就是说try{}代码块中return i所返回的i值是2
在try{}finally{}代码块中,finally{}中的代码一定会执行。

我还是没看懂你的疑问是什么?

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 赞一个!

查看全部评分

回复 使用道具 举报
再补充一点,return的功能是将值返回并结束当前代码块。无论你的代码块是函数,switch语句等等,return都会结束当前代码块,你在return的后面加任意一句代码都会报错:无法访问的语句或者是不可达到的代码等等,反正都是一个意思访问不到。因为return已经将当前代码块结束了。
回复 使用道具 举报
张硕 中级黑马 2012-11-19 22:57:04
7#
finally关键字后面的语句是一定会被执行的,如果没有抛出异常,那么按照程序的执行顺序执行,如果在try块中抛出异常的话,在return语句执行之后返回程序之前,会去执行finally中的语句,当里面的语句执行完了,才会让return语句返回结果。

QQ截图20121119224917.png (5.38 KB, 下载次数: 145)

QQ截图20121119224917.png

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

回复 使用道具 举报
李刚 中级黑马 2012-11-20 11:38:24
8#
try中的 return语句调用的函数先于finally 中调用的函数执行,也就是说 return语句先执行,finally
语句后执行,所以返回的是finally结果 。 return并不是让函数马上返回,而是return 语
句执行后,将把返回结果放置进函数栈中,此时函数并不是马上返回,它要执行finally 语
句后才真正开始返回。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马