依稀记得finally块的执行顺序是在try块的后面,但是是在try的return语句之前。然后试了一下。
public static void main(String[] args) { // TODO Auto-generated method stub System.out.println(get()); } public static boolean get() { try { System.out.println("try"); return true; } catch (Exception e) { e.printStackTrace(); } finally { System.out.println("finally"); } return false; }
果然打印结果为:
try
finally
true
但是上午写代码的时候碰到个情况,try语句中最后要return一个值,return语句里面引用到一个对象,但是要在finally中清理掉这个对象,心想这要是按照上面的执行顺序,岂不是在return的时候就会报空指针的错误了,于是尝试了一下。
class C { int c = 100; int get() { return c; } }
public static void main(String[] args) { // TODO Auto-generated method stub System.out.println(get()); } public static boolean get() { C c = null; try { c = new C(); System.out.println("try"); return (c.get() == 100); } catch (Exception e) { e.printStackTrace(); } finally { c = null; System.out.println(c); System.out.println("finally"); } return false; }
发现打印结果为:
try
null
finally
true
可见finally确实在try块之后,try中return之前执行了,并且将对象变成null,但是貌似并没有影响try块中return语句的执行结果。表面上貌似跟上面第一个测试的结果相悖了。于是猜想是不是return语句执行结束之后,把执行的结果存放在某个地方了,等到finally执行完毕再把值取出,return出来。
于是重新尝试在finally中return值
public static void main(String[] args) { // TODO Auto-generated method stub System.out.println(get()); } public static boolean get() { C c = null; try { c = new C(); System.out.println("try"); return (c.get() == 100); } catch (Exception e) { e.printStackTrace(); } finally { c = null; System.out.println(c); System.out.println("finally"); return false; } // return false; }
执行结果为
try
null
finally
false
因为finally中的return语句,替换掉了在try中return保存的值。
所以在finally中把对象进行销毁,是不用担心try中return语句的执行结果,因为这个结果在开始执行finally之前就已经保存下来了,只是在finally执行完毕之后重新取出之前保存的值,再return出来
相关推荐
finally语句块与return的执行关系
主要介绍了关于Java中try finally return语句的执行顺序浅析,需要的朋友可以参考下
在Java的异常机制中,如果finally中含有return语句,则try和catch中的return语句将会被JVM忽视
主要介绍了Java异常处理中同时有finally和return语句的执行问题,首先确定的是一般finally语句都会被执行...然后,需要的朋友可以参考下
try、catch、finally、return 执行顺序超详细讲解,包看包会。
Java语言finally语句详解,finally到底是在return之前还是之后执行.zip
第一:return语句并不是函数的终出口,如果有finally语句,这在return之后还会执行finally(return的值会暂存在栈里面,等待finally执行后再返回) 第二:finally里面不建议放return语句,根据需要,return语句...
try-catch-finally执行顺序验证(左边是.java文件,右边是.class文件) 提示: try、catch块内的return操作编译后会变成把return的值保存到变量var的操作。 总结: try、catch块内的return操作编译后会变成把return的值...
主要介绍了关于java中的一道面试题,这套题就是在try中含return语句时代码的执行顺序,这个问题看似简单,却暗藏杀机啊!文中通过一个个例子详细介绍了其中玄机,需要的朋友可以参考学习,下面来一起看看吧。
Java finally语句到底是在return之前还是之后执行?Java finally执行深度剖析,具体看这篇博文:http://blog.csdn.net/lanxuezaipiao/article/details/16922895,这是里面相关的源码,欢迎大家下载使用。
Condition 3: try中有异常,try-catch-finally里都没有return ,finally 之后有个returntry中有异常以后,根据
首先执行try,如果有异常执行catch,无论如何都会执行finally,当有return以后,函数就会把这个数据存储在某个位置,然后告诉主函数,我不执行了,接下来你执行吧,所以函数就会推出
我们知道return语句用在某一个方法中,一是用于返回函数的执行结果,二是用于返回值为void类型的函数中,仅仅是一个return语句(return ;),此时用于结束方法的执行,也即此return后的语句将不会被执行,当然,这种...
NULL 博文链接:https://seaizon.iteye.com/blog/2066983
Java中return语句.pdf 学习资料 复习资料 教学资源
在Java中当try、finally语句中包含return语句时,执行情况到底是怎样的,finally中的代码是否执行,大家众说纷纭,有的说会执行,有的说不会执行,到底哪种说法正确,下面我们来详细讨论下
Java中return语句实例.pdf 学习资料 复习资料 教学资源
下面小编就为大家带来一篇浅谈Java finally语句到底是在return之前还是之后执行(必看篇)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
finally 一定会被执行,如果 finally 里有 return 语句,则覆盖 try/catch 里的 return , 比较爱考的是 finally 里没有 return 语句,这时虽然 finally 里对 return 的值进行了修改,但 return 的值并不改变这种...
- 无论try是否发生异常,finally语句都会执行- 如果try/catch中包含控制转移语句(return、continue、break),finally