本帖最后由 呢喃的喃呢 于 2014-1-12 18:55 编辑
提问帖:http://bbs.itheima.com/thread-105030-1-1.html
提问内容:
- try{}里有一个return语句,那么紧跟在这个try后的finally{}里的code什么时候被执行?
- 网上搜索的答案,有回答是之前的,可是我自己写了代码理解为是之后,因为我理解的return语句执行完后,不是马上返回到其他程序执行,而是跳出try{},然后把finally{}执行完了再跳转;不知道我的理解对不对?还请高手指点,以下是我的实验代码:
复制代码
以下是我的回复
如果是返回值的原因使得你有这样的疑问
其实很简单的道理。表示局部变量的道理是没有完全明白,我就说下,返回值为什么没有你想象中改变的原因。
在JAVA机制里面 jvm管理内存很复杂,我就不扯JVM的机制了。
既然你把x定义在了try 之外。哪就是说 try catch finall都可以拿到这个变量的引用,这个没有争议吧。(如果你在try中定义,它就是属于一个局部变量,你finally使用根本就会编译出错的)。哪么根据自动包装原则,这个数字会变成Integer对象。
JVM管理内存的方法就是对象引用。扯了很多回到正题
你的try中有return 会返回结果。返回的还是x.至于你为什么返回的x还是原数,而不是++x的结果,是因为你可以理解成为,finally是在return 之后执行的。finally里面执行的++x是影响不到你try或者catch时候return 返回的结果的,除非你在finally里面使用return.
上面说了很多废话 简明说就是 finally是在try return 之后执行的,你在finally这里进行的任何操作无法改变try 或 catch return哪一瞬间的引用对象值。除非你在finally里面再次return
如果不是返回值的困扰,知识单纯的不知道他们的顺序
不管是try 还是catch里面是否使用了return都无法取之后finally的执行,除非你用了System.exit(0),finally才会不执行 |