try catch里面try catch嵌套

try catch里面try catch嵌套trycatch里能否内嵌trycatch?答案是肯定的。但是等内层trycatch出异常之后是个什么执行顺序呢?看下面代码staticvoidMain(string[]args){try{Console.WriteLine(“———————-外层try——————————“);error

大家好,又见面了,我是你们的朋友全栈君。

try catch里能否内嵌try catch?答案是肯定的。但是等内层try catch出异常之后是个什么执行顺序呢?看下面代码

 static void Main(string[] args)
        {
            try
            {
                Console.WriteLine("----------------------外层try------------------------------");
                errorMethod();               
            }
            catch (Exception ex)
            {
                Console.WriteLine("----------------------外层catch" + ex.Message + "------------------------------");
            }
            finally {
                Console.WriteLine("----------------------外层finally------------------------------");
            }

            Console.ReadKey();


        }

        private static void errorMethod()
        {           
            try
            {
                Console.WriteLine("----------------------内层try------------------------------");
                int i = 0;
                int a = 100/i;
            }
            catch (Exception ex)
            {
                Console.WriteLine("----------------------内层catch" + ex.Message + "------------------------------");
            }
            finally {
                Console.WriteLine("----------------------内层finally------------------------------");
            }
        }

在这里插入图片描述

内层catch处理了异常,所以没有执行外层catch。

咱们把内层的catch注释掉 再试下

 static void Main(string[] args)
        {
            try
            {
                Console.WriteLine("----------------------外层try------------------------------");
                errorMethod();               
            }
            catch (Exception ex)
            {
                Console.WriteLine("----------------------外层catch" + ex.Message + "------------------------------");
            }
            finally {
                Console.WriteLine("----------------------外层finally------------------------------");
            }

            Console.ReadKey();


        }

        private static void errorMethod()
        {           
            try
            {
                Console.WriteLine("----------------------内层try------------------------------");
                int i = 0;
                int a = 100/i;
            }
            //catch (Exception ex)
            //{
            //    Console.WriteLine("----------------------内层catch" + ex.Message + "------------------------------");
            //}
            finally {
                Console.WriteLine("----------------------内层finally------------------------------");
            }
        }

在这里插入图片描述

很明显,外层catch捕获了异常。

总结:try catch嵌套,内层不能捕获时,会考虑外层内否捕获,内层能捕获,则外层catch不执行。

     try
        {
            //A  
            try
            {
                //B 
            }
            catch
            {
                //C  
            }
            finally
            {
                //D  
            }
            //E  
        }
        catch
        {
            //F
        }
        finally
        {
            //G
        }

上面的代码 执行顺序

抛出异常在:内层A,E处由外层catch块捕获,并执行外层finally
抛出异常在:内层B处,且有一合适内层catch捕获,执行内层finally,后执行E处
抛出异常在:内层B处,但内层catch块没有合适处理程序,执行内层finally,搜索外层catch,找合适的,执行外层finally,此时不会执行E
抛出异常在:内层C处,退出内层catch块,执行内层finally,搜索外层catch,找到合适,执行外层finally
抛出异常在:内层D处,退出内层finally块,搜索外层catch,找到合适,执行外层finally

A抛异常 A=》F=》G

B抛异常 C能捕获 B=》C=》D=》E=》F=》G (若C处无法捕获B=》F=》G)

C抛异常 C=》D=》F=》G

D抛异常 D=》F=》G

E抛异常 A=》F=》G 同A

另外 try{}catch{} 中未做捕获类型限定,可捕获所以异常。如 try{}catch(IOException ex){} 则catch只能捕获I/O操作引发的异常。

转载于:https://www.cnblogs.com/zhangchengye/p/5674240.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/148528.html原文链接:https://javaforall.net

(0)
上一篇 2022年6月16日 上午6:00
下一篇 2022年6月16日 上午6:00


相关推荐

  • 利用Topshelf把.NET Core Generic Host管理的应用程序部署为Windows服务「建议收藏」

    利用Topshelf把.NET Core Generic Host管理的应用程序部署为Windows服务「建议收藏」背景2019第一篇文章。此文源于前公司在迁移项目到.NETCore的过程中,希望使用GenericHost来管理定时任务程序时,没法部署到Windows服务的问题,而且官方也没给出解决方案,只能关注一下官方issue#809等他们方解决了。官方文档只提供了一个《在Windows服务中托管ASP.NETCore》的方案,可以使用Microsoft.AspNetCore.Host…

    2022年8月31日
    4
  • Linux 下如何创建 /删除软连接

    Linux 下如何创建 /删除软连接废话不说直接正题软链接 又称符号连接 与硬链接不同的是 软链接不链向索引节点号 而是链向目录 相当于的 Windows 中的快捷方式 它实际上是一个特殊的文件 在符号连接中 文件实际上是一个文本文件 其中包含的有另一文件的位置信息 nbsp 1 创建软链接 就是说将源文件也可以是目录映射到目标文件或目标目录上 ln s 源文件名目标文件名 nbsp nbsp 这里将 softwarehous 映射到

    2026年3月18日
    2
  • 用python编写猴子吃桃问题_人工智能猴子摘香蕉

    用python编写猴子吃桃问题_人工智能猴子摘香蕉一个房间里,天花板上挂有一串香蕉,有一只猴子可在房间里任意活动(到处走动,推移箱子,攀登箱子等)。设房间里还有一只可被猴子移动的箱子,且猴子登上箱子时才能摘到香蕉,问猴子在某一状态下(设猴子位置为A,香蕉位置在B,箱子位置为C),如何行动可摘取到香蕉。此问题的前提是猴子只有站在箱子上才能拿到香蕉,因此,需要首先让猴子找到箱子,再找到香蕉,并将箱子搬到香蕉下面。2.1使用语义网络实现猴子摘香蕉的知识表示2.2用java实现猴子摘香蕉Monkey类:12345678910111213141516171

    2026年4月13日
    5
  • c++开发面试问题(java面试app)

    面试智力题1、25皮马,5个赛道,求经过几场比赛,可以得到跑得最快的5皮马1)先把25皮马分成5组,分别每组进行比赛:(5场)A1A2A3A4A5、B1B2B3B4B5、C1C2C3C4C5、D1D2D3D4D5、E1E2E3E4E5。假设每组比赛后,结果如上所示。2)把每组最快的马拿出来进行比赛:(1场)A1B1…

    2022年4月10日
    44
  • iWork8删除Android分区,摆脱安卓,释放空间——iwork1x双系统变win10单系统教程

    iWork8删除Android分区,摆脱安卓,释放空间——iwork1x双系统变win10单系统教程今天小编介绍一下安卓系统相关教程 在上期 笔者介绍了 iwork1x 二合一平板电脑 各方面都比较优秀 笔者又给笔记本配置了官方标配键盘后 使用 win10 系统就特别方便了 发现安卓系统在这个平板上反而成为一个累赘 在日常生活中使用频率并不高 更重要的是 平板电脑的 64G 存储空间给安卓系统分配了 18G 存储 留给 win10 系统的存储只有 46G 而 win10 系统本身就要占据近 18G 的空间 也就是实际可用空间

    2026年3月18日
    3
  • java switch基础介绍及具体使用方法

    java switch基础介绍及具体使用方法switch的case语句可以处理int,short,byte,char类型的值,但是不能处理long,String等类型。javaswitch基础语法witch(表达式){case表达式常量1:语句1;break;case表达式常量2:语句2;break;……case表达式常量n:语句n;break;[default:语句n+1;]…

    2022年7月8日
    21

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号