zoukankan      html  css  js  c++  java
  • 天轰穿C# vs2010 03C#的异常处理之异常处理的系统流程【原创】

     

    小天:通过刚才多次断点调试,我发现如果没有错误,则无论多少个catch块都不会执行。而发生错误后,它也不会挨个catch块去判断,而是直接找到对应的catch块。能不能详细跟我说下异常处理的系统流程。

    老田:好的,当你的程序遇到一个非正常情况,比如说内存不足,它就会引发(throw/raise)一个异常。此时,当前的过程调用将挂起,.NET 运行时(CLR)将从下至上搜索过程调用堆栈,以查找相应的异常处理程序。也就是说,如果抛出异常的代码正处于某个 Try 块中,运行时将首先使用本地的 Catch 块(如果有)来处理异常(它将执行在该位置找到的 Catch 块代码),否则这个程序段将被终止并将异常的处理权交给其调用函数;如果没有函数处理此异常(即在整个调用堆栈中没能找到适当的 Catch 块),最终运行时将会得到并处理它,并立刻将你的程序终止。

    l  No exception表示的是无异常时的程序运行流程: 程序在执行try程序模块的时候,如果没有出现异常,程序将跳过catch段直接到setp4

    l  Statement1 fails表示程序在执行过程中出现异常的程序运行流程:程序在执行try程序模块的时候,程序将立刻直接进入catch段。

    另外有两点需要提醒的是:

    1:如果您想让异常处理继续,你要在catch子句中写出一些具体的方法,空的catch段相当于给异常放行。因此进行完catch子句后,应该使用return, throw, 或者exit来跳出程序的执行。

    2catch块的次序必须十分小心,比如一个DivideByZeroException 异常继承自ArithmeticException异常,如果你先捕获后者,则当除数为0时抛出的异常就会进入ArithmeticException块而永远不会进入DivideByZeroException块。事实上,当这种情况出现时,编译器会发现DivideByZeroException块不能被执行到,并会报告一个编译错误。

           接下来再看个实例,步骤如下:

    1.       在上面创建的“异常第一个实例”的Windows桌面应用程序中添加一个名为“systemflow”的新窗体。

    2.       Program.cs中修改启动窗体。

    3.       在这个窗体上分别放如下控件,并修改属性:

                            i.              一个Label,修改Text属性为“请输入整型数据”;

                          ii.              一个TextBox,修改name属性为tb_num

                        iii.              一个Button,修改Text属性为“转换”;

      4.       双击“转换”按钮,添加如下代码:

            private void button1_Click(object sender, EventArgs e)

            {

                try

                {

                    int i = int.Parse(tb_num.Text);

                    //思考下面这句话的意思

                    button1.Text += "之后的结果是: " + i.ToString();

                }

                catch (Exception ex)

                {

                    MessageBox.Show(ex.Message);

                    return;

                }

                catch (FormatException fex) //编译器会在这里给出错误提示

                {

                    MessageBox.Show(fex.Message);

                    return;

                }

            }

    5.       这个示例就不用运行了,因为运行也只会得到一个错误提示。不过上面例题中,我们一如既往的将运算符的知识给融合进来了。

    6.       给个作业,就是将上面例题修改正确。

    本文章为天轰穿原创作品,转载请注明出处及作者。

  • 相关阅读:
    v-model的实现原理
    面试技巧
    Vue中使用mui的tab-top-webview-main完成分类滑动栏出现兼容问题如何解决
    前端jquery面试题个人总结
    下拉复选框
    什么是BFC
    CSS控制文本自动换行
    CSS+DIV布局中absolute和relative区别
    2种方式解决vue路由跳转未匹配相应路由避免出现空白页面或者指定404页面
    vue页面无操作10分钟内调转到登录页面
  • 原文地址:https://www.cnblogs.com/thcjp/p/2796106.html
Copyright © 2011-2022 走看看