代码如下:

 package test1;

 public class EmbededFinally {

     public static void main(String args[]) {

         int result;

         try {

             System.out.println("in Level 1");

              try {

                 System.out.println("in Level 2");
// result=100/0; //Level 2 try { System.out.println("in Level 3"); result=100/0; //Level 3 } catch (Exception e) { System.out.println("Level 3:" + e.getClass().toString()); } finally { System.out.println("In Level 3 finally"); } // result=100/0; //Level 2 } catch (Exception e) { System.out.println("Level 2:" + e.getClass().toString()); }
finally { System.out.println("In Level 2 finally"); } // result = 100 / 0; //level 1 } catch (Exception e) { System.out.println("Level 1:" + e.getClass().toString()); } finally { System.out.println("In Level 1 finally"); } } }

运行结果如上图:

对于代码的分析: 前三行输出结果,是try中三个正常的输出语句,并且在最后抛出了一个by zero错误。然后用catch语句捕捉了这个语句,并且输出了语句。但我们会发现后面的catch语句都没有被执行,而是直接执行了finally语句,说明finally语句改变了代码中输出的逻辑。但具体的原因尚不明确。

最后,提出一个小问题:finally语句一定会执行吗?

我姑且自己回答一下,如果在finally之前使用了exit,退出了程序,那么finally语句就不会执行了。

比如,我们用以下的测试代码:

 package test1;
public class SystemExitAndFinally { public static void main(String[] args)
{ try{ System.out.println("in main"); throw new Exception("Exception is thrown in main"); //System.exit(0); } catch(Exception e) { System.out.println(e.getMessage()); System.exit(0); } finally { System.out.println("in finally"); } } }

运行结果如图:

我们可以看到,finally后的语句并没有被输出,而在退出程序前的语句并没有任何影响。

最新文章

  1. iTextSharp简单生成pdf和操作pdf添加水印
  2. 您还有心跳吗?超时机制分析(java)
  3. 人工智能系统Google开源的TensorFlow官方文档中文版
  4. mysql事务处理用法与实例详解
  5. js读取本地磁盘文本文件并保存为JSON数据(有格式的文本)
  6. Android学习笔记__2__Android工程目录结构
  7. CSS学习笔记(1):选择器
  8. Android NDK 简单介绍、工具安装、环境配置
  9. MVC 中使用 SignalR 实现推送功能
  10. HashMap TreeMap ConcurrentHashMap 源码
  11. commons - lang(1) StringUtils
  12. 在python3里面使用ueditor(基于adminx)
  13. 洛谷P5069 [Ynoi2015]纵使日薄西山(树状数组,set)
  14. Weblogic读不到Word文件
  15. Servlet与HTTP介绍学习
  16. iOS 禁止手势滑动翻页
  17. FZU 2252 Yu-Gi-Oh!(枚举+贪心)
  18. Unity3D-常用小功能详解,例子(得分变动效果、倒计时)
  19. CF312B 【Archer】
  20. JS实现弹出层效果

热门文章

  1. ClassLoad
  2. ubuntu16.04无法打开终端
  3. split()函数+merge()函数
  4. Labview初识
  5. opencv:轮廓匹配
  6. PHP导出身份证号科学计数法
  7. WKWebView 使用的坑
  8. linux日常运维工作
  9. 从游击队到正规军(三):基于Go的马蜂窝旅游网分布式IM系统技术实践
  10. js实现上移下移