Java开发之道
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

谬误11 必由之路——在try语句块中使用return语句,finally语句块将得不到执行

try…catch…finally语句可能是在Java的众多语句中被人误解频率最高的语句了,比如常见的说法有,try…catch语句控制区域越大越好、所有的异常都要使用try…catch语句捕获,等等。本节要讨论的是当在try语句块中使用return语句后,finally语句块是否能够得到执行。

try语句块主要用来捕获程序运行时的异常,catch语句块用来处理异常,或者说将发生异常时要执行的代码括起来,但无论是否有异常,最后一定会执行finally语句块中的代码。那么在try语句块中使用return语句,程序会出现什么样的情况呢?请看下面的代码:

        public class Test {
        public static void main (String[] args){
            try{
                int i = 5;
                Object obj = i;                                      //整型变量装箱操作
                if (obj. getClass (). getSimpleName (). equals ("Integer")){
                    int j = (Integer) obj;                            //拆箱操作
                    System.out. println ("类型转换成功!");            //输出提示信息
                    return;
                }else{
                    System.out. println ("数据类型不正确!");          //输出提示信息
                }
            }catch(ClassCastException e){
                e. getStackTrace ();                                   //输出异常信息
            }finally{
                System.out. println ("执行了finally语句块!");         //输出提示信息
            }
        }
    }

上述代码运行后的效果如图4.5所示。

图4.5 控制台输出的提示信息

从上面的运行结果可以看出,即使在try语句块中使用了return语句,也仍然阻止不了finally语句的执行,也就是说在任何时候,都会执行finally语句块中的代码。