今天下午在提交代码的时候看到了CheckList中的有一条,检查是否在finally块中使用了return语句。毕竟好几年了,忽然间居然忘记了,为什么?
before return in try section.
before return in finally section.
200
这才恍然大悟,原来Java的实现机制是在调用try代码块的return之前就会去执行finally里面的代码,这样finally的return就会结束当前的方法,返回一个错误的值,最好的实践还是,只有少量的资源需要释放的时候,才去使用finally,不要一股脑的扔到finally里面去处理,其他就扔给Java的垃圾回收机制处理好了。
赶紧动手,写了一个DEMO,恍然大悟:
public class TestFinally {
public int getAddResult(int x,int y){
try{
System.out.println("before return in try section.");
return x+y;
}finally{
System.out.println("before return in finally section.");
return x*y;
}
}
public static void main(String[] args) {
System.out.println(new TestFinally().getAddResult(10, 20));
}
}
上面程序的返回结果如下:
before return in try section.
before return in finally section.
200
这才恍然大悟,原来Java的实现机制是在调用try代码块的return之前就会去执行finally里面的代码,这样finally的return就会结束当前的方法,返回一个错误的值,最好的实践还是,只有少量的资源需要释放的时候,才去使用finally,不要一股脑的扔到finally里面去处理,其他就扔给Java的垃圾回收机制处理好了。