Fork me on GitHub

你真的了解try{ return } finally{}中的return吗?

 

 

上图执行完try块后执行finally中内容,y输出为2。

当执行到return ++x;时,jvm在执行完++x后会在局部变量表里另外分配一个空间来保存当前x的值。
注意,现在还没把值返回给y,而是继续执行finally语句里的语句。等执行完后再把之前保存的值(是2不是x)返回给y。
所以就有了y是2不是3的情况。

如果finally中也有return,则输出为3。但finally语句块中最好不要用return,因为会使catch的throw内容无效。

 

posted @ 2018-11-06 14:00  丹青墨染  阅读(187)  评论(0)    收藏  举报