try catch嵌套执行顺序测试
分享一段测试try catch 执行顺序和那些代码后续执行,那么不执行的代码:
@Testpublic void testTryCatch(){try {System.out.println(" 外层 try !" );//Integer.parseInt(null);try {System.out.println(" 外层 try的 内层 try " );Integer.parseInt(null);}catch (Exception ex2) {Integer.parseInt(null);System.out.println(" 外层 try的 内层 catch " );}finally {Integer.parseInt(null);System.out.println(" 外层 try的 内层 finally");}System.out.println("外层 try 异常之后执行!");Integer.parseInt(null);}catch (Exception ex) {try {System.out.println(" 内层 try " );Integer.parseInt(null);}catch (Exception ex2) {System.out.println(" 内层 catch " );}finally {System.out.println(" 内层 finally");}System.out.println("外层 catch " );}finally {System.out.println("外层 finally!");}}
通过注释 Integer.parseInt(null); 完成自己想要跑异常的点,完后看后续处理的顺序。
总结:抛出异常的点,后续代码不执行,然后找最近的catch,执行catch和finally,然后再往外层执行。
但是如果catch内部再次出现异常,会往外层抛,直到找到最近的catch。所以在使用嵌套trycatch的时候需要注意的地方就是,哪里会抛出异常,异常的顺序,那些后续可能不会执行。
再分享一段spring的代码
if (this.registrar.hasTasks() && this.registrar.getScheduler() == null) {Assert.state(this.beanFactory != null, "BeanFactory must be set to find scheduler by type");try {// Search for TaskScheduler bean...this.registrar.setTaskScheduler(this.beanFactory.getBean(TaskScheduler.class));}catch (NoSuchBeanDefinitionException ex) {logger.debug("Could not find default TaskScheduler bean", ex);// Search for ScheduledExecutorService bean next...try {this.registrar.setScheduler(this.beanFactory.getBean(ScheduledExecutorService.class));}catch (NoSuchBeanDefinitionException ex2) {logger.debug("Could not find default ScheduledExecutorService bean", ex);// Giving up -> falling back to default scheduler within the registrar...}}
}
最后说一下个人的观点,尽量避免使用嵌套异常处理工作。除非逻辑简单,有一定的可读性,不然会极大的影响可读性,另外就是避免一些后续处理逻辑异常。
try catch嵌套执行顺序测试相关推荐
- Unity脚本在层级面板中的执行顺序测试3
断断续续的写了3篇,以后有时间可以做成一个系列了 前面2篇测试了GameObject的顺序,以及Awake和OnEnable的时机: Unity脚本在层级面板中的执行顺序测试1 http://www. ...
- 细琢磨,try catch finally 执行顺序与返回值
try catch finally 常见格式如下: try{//应用代码}catch(Exception e){//异常捕捉处理}finally{//资源释放.流关闭等等 } 通常执行顺序: try有 ...
- java代码块执行顺序_Java笔记 | Java代码块执行顺序测试
最近笔试常常遇到考察Java代码块执行顺序的题目,网上查看博客错漏百出,特地自己测试了一下. 如有错漏,希望路过的大佬指出来,以便我进行更改. 先上代码吧! public class ClassA { ...
- 多个for语句嵌套执行顺序_阿里真实面试题解析之实现多个线程顺序执行的几种方式...
前几天有一位同事在阿里一面的时候被问到这么一个多线程问题:如何保证多个线程的顺序执行.当时他没有回答上来,所以为了避免大家以后遇到同样的面试题还是回答不上来,今天我们就来分析解答下这个问题. 问题缘由 ...
- Promise—关于catch(你真的了解catch的执行顺序吗)
一.问题 今天突然被同事问到一个问题,以下代码怎么输出: Promise.all([new Promise(res => res(0)), new Promise((res, rej) => ...
- c# Parallel.For 并行编程 执行顺序测试
因为有个for 实际执行结果尽管是按照for里边的顺序执行,但处理器让哪个分线程先执行,谁先处理完就不一定了. 对于要求结果需要先后顺序的,比如对text内容的操作, 用并行 Parallel.For ...
- for语句嵌套执行顺序_C语言笔记 | for语句嵌套时的运行顺序
for语句在C程序中的出场频率是相当高的,重要程度不言而喻.今天向大家分享for语句在嵌套时的具体运行顺序.其实,在一开始学习C语言的时候,我们的老师就告诉我们看懂程序的重要性,就是要让自己像机器一样 ...
- try catch finally 执行顺序问题
public static void main(String[] args) {System.out.println(abc());}public static Integer abc(){Syste ...
- try { } catch{ } finally{ } 执行顺序总结
publicclass TestTry { publicstaticvoid main(String[] args) { TestTry t = new TestTry(); System.out.p ...
最新文章
- Mongodb的范式化和反范式化
- Struts2_概述
- 利用fnd_conc_global.set_req_globals设置子请求的Parent Request ID
- C 这些东西的内存管理
- 三分钟学会缓存工具DiskLruCache
- 如何实现wpf的多国语言
- python编程入门指南-编程入门指南
- createbitmap 旋转90度_如何旋转的位图90度
- 利用反射和元数据编写的通用更新和通用查询
- 在html中做表格以及给表格设置高宽字体居中和表格线的粗细
- Codeforces Round #364 (Div. 1) 700B(树)
- 毕业设计!Python实现学生教师刷脸签到系统
- TDD (test driver development)测试驱动开发
- Linux设置串口波特率等参数
- 宽带连接工具[bat]
- 记录一次GeoTIFF文件二进制源码阅读
- 拜师——python基础入门—第3大节课—列表,排序,revered逆序,max,min,sum——day15
- 在计算机上知道手机密码,不知道密码查手机通话记录:傻瓜式教程
- 写文章没高质量配图?python爬虫绕过限制一键搜索下载图虫创意图片!
- 西部数据推出10TB容量监控级硬盘