首页 > 代码库 > CoreJava_不要在finally块中使用return关键字

CoreJava_不要在finally块中使用return关键字

    今天下午在提交代码的时候看到了CheckList中的有一条,检查是否在finally块中使用了return语句。毕竟好几年了,忽然间居然忘记了,为什么?

    赶紧动手,写了一个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的垃圾回收机制处理好了。

CoreJava_不要在finally块中使用return关键字