try catch finally return 轶事
最近阿里发布了java开发手册终极版,看到其中一条规约:【强制】不能在 finally 块中使用 return, finally 块中的 return 返回后方法结束执行,不会再执行 try 块中的 return 语句。于是在ideal里面实际跑了一下,果然如此。于是好奇编译后的代码是如何的,结果很是惊讶呢,细品还是很有道理的。代码如下:
public int test() { try{ System.out.println("try"); return 3; }catch (Exception e){ System.out.println("exception"); return 1; }finally{ System.out.println("finally"); return 2; } }
运行结果如下:
try
finally
2
的确没有输出try块中的return值,反编译之后代码如下:
public int test() { try { System.out.println("try"); boolean var1 = true; } catch (Exception var6) { System.out.println("exception"); boolean var2 = true; } finally { System.out.println("finally"); return 2; } }
对代码稍作改动,去掉finally中的return语句。
public int test() { try{ System.out.println("try"); return 3; }catch (Exception e){ System.out.println("exception"); return 1; }finally{ System.out.println("finally"); //return 2; } }
运行结果如下:
try
finally
3
反编译之后的代码如下:
public int test() { byte var2; try { System.out.println("try"); byte var1 = 3; return var1; } catch (Exception var6) { System.out.println("exception"); var2 = 1; } finally { System.out.println("finally"); } return var2; }
作者:robert 出处:http://www.cnblogs.com/robertsun/ 本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。 如果文中有错误,欢迎指出。以免更多的人被误导。 欢迎留言交流。 |