醉美猴王
2017-10-16 17:36:22
java finally里误用return返回错误结果
今天看到一句话,finally 语句块在 try 语句块中的 return 语句之前执行,过了两年突然对这句话感到有些困惑,以为是执行完try之后有finally就最终执行finally,没成想“finally 语句块在 try 语句块中的 return 语句之前执行”才是真理。
package test; public class TestFinallyReturn { public static void main(String[] args) { System.out.println(testFinally()); } @SuppressWarnings("finally") private static int testFinally(){ try { System.out.println("try"); return 1; } catch (Exception e) { return -1; } finally{ System.out.println("finally"); return 0; } } }
执行结果如下:
try
finally
0
由上可知,finally 语句块在 try 语句块中的 return 语句之前执行,一定要注意:
只有资源需要释放的时候,才去使用finally,不要一股脑的扔到finally里面去处理,其他就扔给Java的垃圾回收机制处理吧,否则一不小心返回一个错误的结果就麻烦了。
评论