国庆几天,闲的蛋疼,于是便找了一些以前学过的东西来敲,随后发现了一个小问题。
由于代码教简单,先现出代码:
package cn.lzj0927_cvte_question; /** * return 的用途:导致当前方法的退出,并返回那个值 * finally :无论异常是否被抛出,finally子句总能被执行 */ public class TestTryFinally { public static void main(String[] args) { System.out.println(test()); } public static int test(){ int x =99; try{ System.out.println("try"+x); return x; } finally{ System.out.println("finally"+x); x=8; System.out.println("finally"+x); } } }
运行结果如下:
try99
finally99
finally8
99
可以看见,在finally中x的值已被改变,可是输出的竟然是x改变之前的值。
test的执行顺序如下:
若try{}子句中有return,那么执行到return时,先不返回,先执行fianlly子句,再返回值。
仔细分析,可以发现,fianlly中改变的只是x在栈中的值,在返回时,变量指向的值并没有被改变。把test代码稍作修改:
public static int test2(){ int x =99; int y =0; try{ System.out.println("try"+x); return x; } finally{ System.out.println("finally"+x); x=y; return x; } }
main中输出的便是y的值:0
可推测,在try中执行到return时,先把要返回的引用存到了某一地方,但未返回,当执行完finally时,便调用引用,返回引用所指向的堆中所存的值。因此,在finally中对基本数据类型变量的值的改变对返回值并没有影响,而对对象引用的改变就会对返回值有所影响。
后来我在finally中也加了一个return,输出的是x改变之后的值。可知finally中的return会覆盖try中的return,也就是说,若finally中有return,将直接返回,不会再执行try中的return。
相关推荐
finally语句块与return的执行关系
Java finally语句到底是在return之前还是之后执行?Java finally执行深度剖析,具体看这篇博文:http://blog.csdn.net/lanxuezaipiao/article/details/16922895,这是里面相关的源码,欢迎大家下载使用。
在Java的异常机制中,如果finally中含有return语句,则try和catch中的return语句将会被JVM忽视
Java语言finally语句详解,finally到底是在return之前还是之后执行.zip
NULL 博文链接:https://seaizon.iteye.com/blog/2066983
Condition 3: try中有异常,try-catch-finally里都没有return ,finally 之后有个returntry中有异常以后,根据
在Java中当try、finally语句中包含return语句时,执行情况到底是怎样的,finally中的代码是否执行,大家众说纷纭,有的说会执行,有的说不会执行,到底哪种说法正确,下面我们来详细讨论下
try、catch、finally、return 执行顺序超详细讲解,包看包会。
本文主要给大家介绍了在Python中return和finally共同存在的坑,以及填坑经验,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧。 初识 return 相信每一个用过Python函数的童鞋, 肯定会用过return...
主要介绍了Java异常处理中同时有finally和return语句的执行问题,首先确定的是一般finally语句都会被执行...然后,需要的朋友可以参考下
try-catch-finally执行顺序验证(左边是....(2)如果finally中无return则执行return var,finally块中的操作不会影响var的值(如果var的值是对象的内存地址,则finally块的操作可以改变该对象的属性值)。 验证 1.基本类型
主要介绍了关于Java中try finally return语句的执行顺序浅析,需要的朋友可以参考下
下面小编就为大家带来一篇浅谈Java finally语句到底是在return之前还是之后执行(必看篇)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
第一:return语句并不是函数的终出口,如果有finally语句,这在return之后还会执行finally(return的值会暂存在栈里面,等待finally执行后再返回) 第二:finally里面不建议放return语句,根据需要,return语句...
今天小编就为大家分享一篇python中return的返回和执行实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
主要介绍了Java中finally和return的关系实例解析,总结了二者的关系,然后分享了相关代码示例,小编觉得还是挺不错的,具有一定借鉴价值,需要的朋友可以参考下
关于return的返回值.docx
Shouldn t crash on regexps with many nested parentheses.
首先执行try,如果有异常执行catch,无论如何都会执行finally,当有return以后,函数就会把这个数据存储在某个位置,然后告诉主函数,我不执行了,接下来你执行吧,所以函数就会推出