本篇文章带大家聊聊try catch的执行过程,有时候在开发的过程中,try代码里如果出现异常,catch后的步骤还会继续执行吗?以及finally的使用。

下面来分析一下几种使用场景:

场景一:

try代码块中出现异常后,系统会继续执行catch代码块的程序。catch代码块外的代码也会继续被执行。

/*** Created By wuang* Create Date 2022/7/12 17:47* Description:*/
public class TryCatchDemo {public static void main(String[] args) {try {int[] myNumbers = {1, 2, 3};System.out.println(myNumbers[10]);} catch (Exception e) {System.out.println("Something went wrong.");}System.out.println("catch 之后的代码执行了");}
}

输出结果:

场景二

try代码块中抛出的异常被catch捕获,此时需要注意,catch捕获的异常必须是try抛出的。此时程序会继续执行catch代码块外的代码。否则请看场景三

/*** Created By wuang* Create Date 2022/7/12 17:47* Description:*/
public class TryCatchDemo {public static void main(String[] args) {try {//抛出异常throw  new ArrayIndexOutOfBoundsException();
//            int[] myNumbers = {1, 2, 3};
//            System.out.println(myNumbers[10]);} catch (ArrayIndexOutOfBoundsException e) {System.out.println("Something went wrong.");}System.out.println("catch 之后的代码执行了");}
}

执行结果:

场景三

try抛出的异常,在catch中没有捕获,则此时程序不会继续执行catch代码块内的代码,也不会执行catch代码块之外的代码。

/*** Created By wuang* Create Date 2022/7/12 17:47* Description:*/
public class TryCatchDemo {public static void main(String[] args) {try {throw  new ArrayIndexOutOfBoundsException();
//            int[] myNumbers = {1, 2, 3};
//            System.out.println(myNumbers[10]);} catch (NullPointerException e) {//此处捕获的异常,不是ArrayIndexOutOfBoundsException,则catch中的System.out.println("Something went wrong.");}System.out.println("catch 之后的代码执行了");}
}

执行结果:

finally代码块

针对上面出现的三种场景,finally中代码块都会被执行。针对场景三,finally代码块外的代码不会被执行了,这就和场景三的结论相吻合。

/*** Created By wuang* Create Date 2022/7/12 17:47* Description:*/
public class TryCatchDemo {public static void main(String[] args) {try {throw  new ArrayIndexOutOfBoundsException();
//            int[] myNumbers = {1, 2, 3};
//            System.out.println(myNumbers[10]);} catch (NullPointerException e) {System.out.println("Something went wrong.");}finally {System.out.println("finally 中的程序执行了.");}System.out.println("catch 之后的代码执行了");}
}

到此try catch的过程就验证完毕,在排查问题时知道此流程会帮助你更快的定位问题。

try catch执行过程分析相关推荐

  1. Ansible执行过程分析、异步模式和速度优化

    Ansible系列(七):执行过程分析.异步模式和速度优化 分类: Linux服务篇 undefined 我写了更完善的Ansible专栏文章:一步到位玩儿透Ansible Ansible系列文章:h ...

  2. 4. 系统调用执行过程分析

    ##################################### 作者:张卓 原创作品转载请注明出处:<Linux操作系统分析>MOOC课程 http://www.xuetang ...

  3. ART运行时Semi-Space(SS)和Generational Semi-Space(GSS)GC执行过程分析

    Semi-Space(SS)GC和Generational Semi-Space(GSS)GC是ART运行时引进的两个Compacting GC.它们的共同特点是都具有一个From Space和一个T ...

  4. Chromium硬件加速渲染的OpenGL命令执行过程分析

    在Chromium中,由于GPU进程的存在,WebGL端.Render端和Browser端的GPU命令是代理给GPU进程执行的.Chromium将它们要执行的GPU命令进行编码,然后写入到一个命令缓冲 ...

  5. Mapreduce执行过程分析(基于Hadoop2.4)——(一)

    1 概述 该瞅瞅MapReduce的内部运行原理了,以前只知道个皮毛,再不搞搞,不然怎么死的都不晓得.下文会以2.4版本中的WordCount这个经典例子作为分析的切入点,一步步来看里面到底是个什么情 ...

  6. 【转】2.2【MySQL】运行原理(二):InnoDB 内存结构、磁盘结构及update sql执行过程分析

    前一篇讲完了查询流程,我们是不是再讲讲更新流程.插入流程和删除流程?在数据库里面,我们说的update操作其实包括了更新.插入和删除.如果大家有看过MyBatis的源码,应该知道Executor里面也 ...

  7. ThreadPoolExecutor执行过程分析

    ThreadPoolExecutor public ThreadPoolExecutor(int corePoolSize,int maximumPoolSize,long keepAliveTime ...

  8. try...catch执行了catch后不知道怎么重新执行业务?看这个~

    出现的场景. try-catch-是我们常用的用于处理运行错误的方法,比如IO流错误IOException,比如URL的异常ConnectException.那么在实际业务中(比如远程请求资源,却因为 ...

  9. Netty的启动执行过程分析(一)

    开如启动我们有Netty的服务端,用的方法对象是ServerBootstrap对象 具体的Netty的服务端的代码如下 public class MyNettyServer {public stati ...

最新文章

  1. c++ 进程快照_如何在 Linux 中找出内存消耗最大的进程
  2. 自己动手实现20G中文预训练语言模型示例
  3. Structure-from-Motion Revisited
  4. android一个简单的异步AsyncTask下载数示例,简单下载(07)
  5. Deformable ConvNets--Part4: Deformable Convolutional Networks
  6. Linux统计某个文件夹下的文件个数、目录个数
  7. 如何调试NativeSample
  8. leetcode242. 有效的字母异位词(两种方法map或数组)
  9. html中取消li的点击事件,jquery设置html li点击click事件为什么无法赋值到表单input value中呢?...
  10. 介绍 SQL Server 的安全配置
  11. post 261.html,261除以6约等于
  12. 从实例入手,讲解 CMake 的常见用法。demo1-demo8
  13. C#方法名前的方括号是干嘛用的呀?
  14. cart算法 java实现_Java Cart类代码示例
  15. 实验二 Java基础语法练习-基本数据类型、运算符与表达式、选择结构
  16. 如何在 Python 中将 Excel 文件转换为图像?Aspose快速搞定
  17. java中的double 类型数据相加问题
  18. 先谈云计算再谈云大会
  19. win8手动添加linux启动项,Win8下添加开机启动项的简单办法
  20. 犬夜叉日本漫画Mac动态壁纸

热门文章

  1. Python文件的基本操作和目录操作 笔记分享
  2. 高端专业运动品牌迪桑特与日本著名潮流设计师正式发布联名系列;安踏打造互动数字空间助力冬奥发声 | 知消...
  3. 在Gitee获8.5k Star,做微信小程序商城看这一个开源项目就够了
  4. Intel CPU型号官网详解
  5. 邯郸计算机一级 考点,邯郸计算机等级(一级)考试培训-创硕教育
  6. 利用Vulnhub复现漏洞 - Atlassian Confluence 路径穿越与命令执行漏洞(CVE-2019-3396)
  7. zz 回忆经典 探访情景喜剧《我爱我家》拍摄地之行
  8. 网易面试题:男女小孩战队问题
  9. 【并行计算-CUDA开发】从熟悉到精通 英伟达显卡选购指南
  10. 简述HTML5如何做表格只显示表格的外边框