先看一个代码:
看上去finally后面的return 0;好像并没有执行,但是结果好像也很奇怪,为什么不是先输出“和是:43”。
这里先不着急解释,再来看一个demo:
可是我们以前接收的知识点都是先执行try里的语句啊,这里这么会出现矛盾呢?
实际情况是:当程序执行到try{}语句中的return方法时,会先将结果存储到一个临时栈中,然后程序不会立即返回,而是去执行finally{}中的程序, 在执行`a = 2`时,程序仅仅是覆盖了a的值,但不会去更新临时栈中的那个要返回的值 。执行完之后,就会通知主程序,finally的程序执行完毕,可以请求返回了,这时,就会将临时栈中的值取出来返回。这下应该清楚了,要返回的值是保存至临时栈中的。
再看一个demo:
在这里,finally{}里也有一个return,那么在执行这个return时,就会更新临时栈中的值。同样,在执行完finally之后,就会通知主程序请求返回了,即将临时栈中的值取出来返回。故返回值是2.
照旧来一张发姐照片提提神!!!
最后小编依然欢迎大家评论!小编会在第一时间回复,如果喜欢的话,欢迎订阅哦!一起交流学习进步,毕竟头条的读者中编程大神大有人在啊!