Java finally语句到底是在return之前还是之后执行?
2015-06-28 22:41
363 查看
至少有两种情况下finally语句是不会被执行的:
(1)try语句没有被执行到,如在try语句之前就返回了,这样finally语句就不会执行,这也说明了finally语句被执行的必要而非充分条件是:相应的try语句一定被执行到。
(2)在try块中有System.exit(0);这样的语句,System.exit(0);是终止Java虚拟机JVM的,连JVM都停止了,所有都结束了,当然finally语句也不会被执行到。
其余是这样的
[b]finally语句是在try的return语句执行之后,return返回之前执行。[/b]
(1)try语句没有被执行到,如在try语句之前就返回了,这样finally语句就不会执行,这也说明了finally语句被执行的必要而非充分条件是:相应的try语句一定被执行到。
(2)在try块中有System.exit(0);这样的语句,System.exit(0);是终止Java虚拟机JVM的,连JVM都停止了,所有都结束了,当然finally语句也不会被执行到。
其余是这样的
[b]finally语句是在try的return语句执行之后,return返回之前执行。[/b]
public class FinallyTest1 { public static void main(String[] args) { System.out.println(test1()); } public static int test1() { int b = 20; try { System.out.println("try block"); return b += 80; } catch (Exception e) { System.out.println("catch block"); } finally { System.out.println("finally block"); if (b > 25) { System.out.println("b>25, b = " + b); } } return b; } } 运行结果:
try block finally block b>25, b = 100 100 说明return语句已经执行了再去执行finally语句,不过并没有直接返回,而是等finally语句执行完了再返回结果。
public class FinallyTest1 { public static void main(String[] args) { System.out.println(test11()); } public static String test11() { try { System.out.println("try block"); return test12(); } finally { System.out.println("finally block"); } } public static String test12() { System.out.println("return statement"); return "after return"; } } 运行结果
try block return statement finally block after return
相关文章推荐
- 新版Eclipse找不到Java EE Module Dependencies选项
- 新版Eclipse找不到Java EE Module Dependencies选项
- springMVC+velocity配置
- 新版Eclipse找不到Java EE Module Dependencies选项
- velocity模板在spring中的简单配置
- 进程互斥(三)Peterson算法
- 【工程管理】使用Ant构建struts2 web工程,自动编译,打包成war
- java基础复习
- springmvc+velocity+ Rest Services(xml,json)实例
- Java记录 -1- 基础JDK
- Eclipse BPEL插件下载地址
- Java基础之集合4
- Java反射-再次认识
- Java基础---反射
- Hibernate事务的属性
- ubuntu14.04安装pycharm
- 使用commons-daemon启动、关闭java程序
- Java之旅:简单一句话---J2EE13个规范
- 《Java从入门到精通》第十一章学习笔记
- Java BIO、NIO、AIO 学习