上午在搜索"System.runFinalization"的时候,搜到 http://www.cnblogs.com/Skyar/p/5962253.html ,其中有关于try-catch-finally的部分,特整理如下

先看下面这个方法的返回值

public static String test(){
String x="";
String y=null;
try{
x=y.replace("A","B");
return x+"C";
}catch(Exception e){
x="D";
return x+="EFG";
}finally{
x=x+"H";
return x; //返回DEFGH
}
}

执行过程

  1. 执行try块:执行中抛出一个"NullPointerException",被catch块捕获;return语句得不到执行
  2. 执行catch块:x="D"。此时x=D
  3. 执行catch块:x+="EFG"。此时x=DEFG,return操作挂起
  4. 执行finally块:x=x+"H"。此时x=DEFGH
  5. 执行finally块:return x。将x=DEFGH返回给调用者
  6. 该方法结束

执行机制

  • 如果try中没有异常抛出

    • 执行到try块时,如果return后面跟的是个语句,把该语句运算完,暂时放下不return;
    • 寻找并执行finally语句块,如果finally中有return语句,就执行并return,方法结束;如果没有return语句,就返回执行try中的return,方法结束
  • 如果try中抛出异常
    • try块中抛出异常的这个语句后面的语句都不会执行,后面的return执行不到
    • catch块捕获后,执行catch块,到return语句时,运算完return后面的语句,暂时放下不return
    • 寻找并执行finally语句块,遇到return语句,运算并return,方法结束;如果没有return语句,就返回执行catch的return,方法结束

参考资料:http://www.cnblogs.com/Skyar/p/5962253.html

最新文章

  1. springmvc+mybatis事务回滚
  2. notepad++快捷键
  3. SSH之免密码登录
  4. Python的平凡之路(14)
  5. 手工创建tomcat应用,以及实现js读取本地文件内容
  6. (转载)Eclipse下配置Github环境 .
  7. puppet foreman
  8. CSS3 简易照片墙
  9. iPhone、iPad强制关机
  10. Maven项目搭建(二):Maven搭建SSM框架
  11. ASP.NET Core学习之二 菜鸟踩坑
  12. 【原创】Aduino小车玩法全记录
  13. Vue学习之路6-条件渲染
  14. Python os.walk() 方法遍历文件目录
  15. Python常用模块--datetime
  16. 再谈 iptables 防火墙的 指令配置
  17. django之ORM专项训练之图书信息系统 了不起的双下方法实战 和 分组 聚合 Q, F查询,有約束和無約束
  18. Selenium2+python自动化38-显式等待(WebDriverWait)
  19. java分解质因数,具体程序分析和代码
  20. IOS初级:UIScrollView & UIPageControl

热门文章

  1. 登录校验(demo)
  2. XMPP客户端开发(1)--连接和登录
  3. Spring注解@Value的用法
  4. android FragmentActivity+FragmentTabHost+Fragment框架布局
  5. Java基础复习笔记系列 四 数组
  6. <welcome-file-list>标签的控制作用以及在springmvc中此标签的的配置方式
  7. java顺序表和树的实现
  8. apache配置运行zendframework 2
  9. bootstrap字体图标在谷歌显示正常,在火狐显示异常的问题
  10. Headroom.js – 快速响应用户的页面滚动操作