Java中finally块与return之间的执行顺序
2016-06-23 14:57
531 查看
我们知道,finally块作为java异常处理机制的一部分,其中的代码无条件执行,通常执行释放资源等操作。
但是想本小白这样的初学者可能会有这样的疑惑:有返回值的方法执行到return就会结束,return与finally块之间的执行发生冲突时会发生什么呢?为了解决这种疑惑,本小白做了一下尝试:
1在try块中有return,在finally中没有return,程序执行没有异常:
finally
123
这个结果说明,程序执行到return str,并没有直接返回,而是强行执行finally块,但是这是返回值str已经确定,finally中即使尝试修改也无济于事,但是“finally”依然会执行。
注意这时在finally块之外必须有return语句以保证方法一定会有返回值,否则会报编译错误。
2在try块中有return,在finally中也有return,程序执行没有异常:
程序执行结果为
finally
456
这个结果说明,当finally块中包含return,程序就会无视try中的return语句,此时编译器会报异常(finally block does not complete normally)提醒我们try中的return语句将不会执行。
注意这是finally块以外就不能再有任何代码,否则会报(Unreachable code)
但是想本小白这样的初学者可能会有这样的疑惑:有返回值的方法执行到return就会结束,return与finally块之间的执行发生冲突时会发生什么呢?为了解决这种疑惑,本小白做了一下尝试:
1在try块中有return,在finally中没有return,程序执行没有异常:
public class ExceptionDemo { public static String test(String str){ try { return str; } catch(Exception e){ } finally{ str = "456"; System.out.println("finally"); } return null; } public static void main(String[] args) { System.out.println(test("123")); } }程序执行结果为
finally
123
这个结果说明,程序执行到return str,并没有直接返回,而是强行执行finally块,但是这是返回值str已经确定,finally中即使尝试修改也无济于事,但是“finally”依然会执行。
注意这时在finally块之外必须有return语句以保证方法一定会有返回值,否则会报编译错误。
2在try块中有return,在finally中也有return,程序执行没有异常:
public class ExceptionDemo { public static String test(String str){ try { return str; } catch(Exception e){ } finally{ str = "456"; System.out.println("finally"); return str; } } public static void main(String[] args) { System.out.println(test("123")); } }
程序执行结果为
finally
456
这个结果说明,当finally块中包含return,程序就会无视try中的return语句,此时编译器会报异常(finally block does not complete normally)提醒我们try中的return语句将不会执行。
注意这是finally块以外就不能再有任何代码,否则会报(Unreachable code)
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- c++11 + SDL2 + ffmpeg +OpenAL + java = Android播放器
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序
- 二叉查找树