首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

叙黑马基础题之-java证明return是在finally执行后才返回的,且在finally无法改变返回值

2013-01-28 
谈黑马基础题之--java证明return是在finally执行后才返回的,且在finally无法改变返回值a hrefhttp://ww

谈黑马基础题之--java证明return是在finally执行后才返回的,且在finally无法改变返回值
<a href="http://www.itheima.com" target="blank">android培训</a>、<a href="http://www.itheima.com" target="blank">java培训</a>、期待与您交流!



进入报名系统后,下载基础题,看了下,做到这个题目的时候产生点疑问。于是研究了下

/**
 * 第6题:写一个类证明return是在finally执行后才返回的,且在finally无法改变返回值。
 * @author somebodydie
 *
 */

一开始的时候,我也是这样写的。。以下代码截取自网络,

public class Test6 {public static void main(String[] args) {// TODO Auto-generated method stubSystem.out.println(prove());}public static int prove(){int i = 0;try{i++;return i/0;}catch (Exception e){e.printStackTrace();}finally{i=100;try {Thread.sleep(1000);//让线程sleep 1秒} catch (InterruptedException e) {e.printStackTrace();}System.out.println("此处内容先输出");}return i/0;}}


在finally中我让当前线程sleep一秒,这么做是想证明一点,如果finally执行一定是在return 之前的话,那么两个return 的异常一定会等打印"此处内容先输出"

这句话之后再报出来。

但事实上运行结果是:

java.lang.ArithmeticException: / by zero
at com.itheima.Test6.prove(Test6.java:18)
at com.itheima.Test6.main(Test6.java:11)
此处内容先输出
Exception in thread "main" java.lang.ArithmeticException: / by zero
at com.itheima.Test6.prove(Test6.java:30)
at com.itheima.Test6.main(Test6.java:11)


分别注释try和最后的那个return 可得出结论:

try中return 应该是在 finally 之前执行的。

经过多次运行发现,

大多数情况  “此处内容先输出” 这句话是在 最后那个异常报出之前输出的。

但有时也会出现这种情况:

java.lang.ArithmeticException: / by zero
at com.itheima.Test6.prove(Test6.java:18)
at com.itheima.Test6.main(Test6.java:11)
Exception in thread "main" java.lang.ArithmeticException: / by zero
at com.itheima.Test6.prove(Test6.java:30)
at com.itheima.Test6.main(Test6.java:11)
此处内容先输出

这样的话,到底是最后那个return先执行,还是finally先执行?

基础题中的return 指的又是哪个return?

就有了这些疑问,表示自己才疏学浅,可能文章中有些地方有很低级的错误,希望大家指出。

也希望有大神能给出真正能证明 最后那个return 和 finally 哪个先执行的方法。









1楼www378660084前天 09:29
计算i/0的时候发生异常,就不会return了~~
Re: somebodydie昨天 15:03
回复www378660084n可是finally中的语句,打印出来之后,最后那个return 的异常才抛出,是不是可以理解成,finally执行之后才执行最后那个return.

热点排行