博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
一个常见的问题,混淆的答案
阅读量:5089 次
发布时间:2019-06-13

本文共 860 字,大约阅读时间需要 2 分钟。

问题是:try{} 里有一个return语句, 那么紧跟这个try后的finally{}里的code会不会被执行,什么时候被执行, 在return前还是后?

 

有回答是:finally块先于return执行。 

 

这个问题可以用一个小实验得到解答

int result =  test(); }private int  test() {     int i = 0;     int j = 0;     try     {         ++i;         ++j;         return i+j;     }     catch     {         --i;         return i+j;     }     finally     {         ++i;     }

 

这段代码的test()返回值是2,而不是3, 可见 try {}里的 return i+j 里的表达式先求值,然后放到一个暂存变量,之后转到finally{} 块里的代码继续执行,执行完后跳回try{}块结尾,并把转存变量返回

 

下面的情况是try{}块里发生了异常

int result =  test(); }private int  test() {     int i = 0;     int j = 0;     try     {         ++i;         ++j;         throw new Exception();         return i+j;     }     catch     {         --i;         return i+j;     }     finally     {         ++i;     }

 

这段代码的异常出现后,跳到catch{}块执行,之后跳到finally{}块执行, 之后跳回catch{}块结尾处返回。

转载于:https://www.cnblogs.com/grkin/p/3393190.html

你可能感兴趣的文章