java 抛出异常与finally的混用对于语句块的执行顺序的影响
2024-09-04 04:35:29
代码如下:
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后的语句并没有被输出,而在退出程序前的语句并没有任何影响。
最新文章
- iTextSharp简单生成pdf和操作pdf添加水印
- 您还有心跳吗?超时机制分析(java)
- 人工智能系统Google开源的TensorFlow官方文档中文版
- mysql事务处理用法与实例详解
- js读取本地磁盘文本文件并保存为JSON数据(有格式的文本)
- Android学习笔记__2__Android工程目录结构
- CSS学习笔记(1):选择器
- Android NDK 简单介绍、工具安装、环境配置
- MVC 中使用 SignalR 实现推送功能
- HashMap TreeMap ConcurrentHashMap 源码
- commons - lang(1) StringUtils
- 在python3里面使用ueditor(基于adminx)
- 洛谷P5069 [Ynoi2015]纵使日薄西山(树状数组,set)
- Weblogic读不到Word文件
- Servlet与HTTP介绍学习
- iOS 禁止手势滑动翻页
- FZU 2252 Yu-Gi-Oh!(枚举+贪心)
- Unity3D-常用小功能详解,例子(得分变动效果、倒计时)
- CF312B 【Archer】
- JS实现弹出层效果