黑马程序员技术交流社区
标题:
return 和finally 为什么先输出的是 finally 而不是return后面的i
[打印本页]
作者:
杜正冬
时间:
2012-11-19 20:31
标题:
return 和finally 为什么先输出的是 finally 而不是return后面的i
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);
}
作者:
殷士剑
时间:
2012-11-19 21:01
你的问题是:
当try 中有 return 语句,程序会不会跳出 try...finally 语句。
从这个例子中不难看出,try...finally这种语句,不管怎样最终都是会执行到finally 的。
作者:
杜正冬
时间:
2012-11-19 21:12
为什么先执行finally 然后才输出return后i的值
作者:
坚持远方
时间:
2012-11-19 21:50
你的运行结果是:遇到return后面语句块不被执行 跳出try执行finally
先执行了3
确实是先执行的try,然后就返回了i的值,被finally里面的打印语句记录并打印出来了,我想你是把return的功能搞错了,他是返回值,可是并不能出现什么效果
作者:
金鑫
时间:
2012-11-19 22:39
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{}中的代码一定会执行。
我还是没看懂你的疑问是什么?
作者:
金鑫
时间:
2012-11-19 22:44
再补充一点,return的功能是将值返回并结束当前代码块。无论你的代码块是函数,switch语句等等,return都会结束当前代码块,你在return的后面加任意一句代码都会报错:无法访问的语句或者是不可达到的代码等等,反正都是一个意思访问不到。因为return已经将当前代码块结束了。
作者:
张硕
时间:
2012-11-19 22:57
finally关键字后面的语句是一定会被执行的,如果没有抛出异常,那么按照程序的执行顺序执行,如果在try块中抛出异常的话,在return语句执行之后返回程序之前,会去执行finally中的语句,当里面的语句执行完了,才会让return语句返回结果。
QQ截图20121119224917.png
(5.38 KB, 下载次数: 143)
下载附件
2012-11-19 22:51 上传
作者:
李刚
时间:
2012-11-20 11:38
try中的 return语句调用的函数先于finally 中调用的函数执行,也就是说 return语句先执行,finally
语句后执行,所以返回的是finally结果 。 return并不是让函数马上返回,而是return 语
句执行后,将把返回结果放置进函数栈中,此时函数并不是马上返回,它要执行finally 语
句后才真正开始返回。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2