上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语句块中的代码。