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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • cunit教程linux,linux下CUnit使用

    cunit教程linux,linux下CUnit使用4.C++Test1)简介C++Test是一个功能强大的自动化C/C++单元级测试工具,可以自动测试任何C/C++函数、类,自动生成测试用例、测试驱动函数或桩函数,在自动化的环境下极其容易快速的将单元级的测试覆盖率达到100%。2)功能特性即时测试类/函数支持极端编程模式下的代码测试自动建立类/函数的测试驱动程序和桩调用自动建立和执行类/函数的测试用例提供快速加入和执行说明和功能性测试的框架执行自…

    2022年6月17日
    22
  • 度量学习系列(2):有监督度量学习

    度量学习系列(2):有监督度量学习有监督度量学习算法利用输入点xxx与目标标签yyy作为来学习一个距离矩阵,这个距离矩阵拉近同类别的点(分类问题)或者目标值邻近的点(回归问题)的距离,并使不同类别或目标值相差大的点的互相远离。1.通用API有监督的度量学习算法实质上利用了与scikit-learn相同的应用程序接口(API)。1.1输入数据为了训练一个模型,我们需要两个array-like对象:XXX与yyy。XX…

    2022年6月23日
    27
  • WOW.js – 让页面滚动更有趣

    WOW.js – 让页面滚动更有趣

    2021年9月23日
    43
  • Advanced System Care官方下载(附激活码)

    Advanced System Care官方下载(附激活码)iobit公司出品的一款系统辅助工具AdvancedSystemCare,它通过对系统全方位的诊断,找到系统性能的瓶颈所在,并将测试结果显示出来。针对系统的瓶颈对其优化,提高效率发挥最大的性能,通过优化后系统性能和网络速度都会有明显提升包含基本功能,注册表清理,垃圾文件清理等。现今系统清理,系统优化工具满天飞,可是很少有对系统全方位的诊断,找到系统性能的瓶颈所在,然后有针对性地进行修改、优化…

    2022年10月20日
    2
  • 串口通信-MSComm控件使用详解

    串口通信-MSComm控件使用详解MSComm控件通过串行端口传输和接收数据,为应用程序提供串行通讯功能。MSComm控件在串口编程时非常方便,程序员不必去花时间去了解较为复杂的API函数,而且在VC、VB、Delphi等语言中均可使用。 MicrosoftCommunicationsControl(以下简称MSComm)是Microsoft公司提供的简化Windows下串行通信编程的ActiveX控件,它为应用程序提供了通…

    2025年6月26日
    2
  • navicat premium mac 激活码【中文破解版】

    (navicat premium mac 激活码)2021最新分享一个能用的的激活码出来,希望能帮到需要激活的朋友。目前这个是能用的,但是用的人多了之后也会失效,会不定时更新的,大家持续关注此网站~IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.html…

    2022年3月22日
    94

发表回复

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

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