zoukankan      html  css  js  c++  java
  • 异常处理

    异常就是程序运行中发生的错误,程序如果发生异常,就可以进行异常处理。C#为处理在程序执行期间可能出现的反常情况提供了内置支持。这些异常由正常控制流之外的代码处理。

    1 try-catch语句

    try-catch语句由一个try块后跟一个或多个catch子句构成,这些子句制定不同的异常处理程序。try块包含可能导致异常的保护代码。该块一只执行到引发异常或成功完成为止。catch子句使用时可以不带任何参数,这种情况下它不惑任何类型的异常,并被称为一般catch子句。它还可以接受从System.Exception派生的对象参数,这种情况下它处理特定的异常。在同一个try-catch语句中使用一个以上的特定catch子句。这种情况下catch子句的顺序很重要,因为会按顺序检查cathc子句,先捕获特定程度较高的异常,而不是特定成都较低的异常

    在cathc块中可以使用throw语句再次引发已由catch语句捕获的异常。

    class MyClass

    {

      publci static void Main()

      {

        MyClass x=new MyClass();

        try

        {

          string s=null;

          x.Test(s);

        }     

        catch(Exception e) 

        {

          Console.WriteLine("{0}异常被捕获",e);

        }

      }

      public void Test(string s)

      {  

        if(s==null)

        {

          throw(new ArgumentNullException());    

        }

      }

    }

    2 try-finally语句

    finally块用于清除try块中分配的任何资源,以及运行任何即使在发生异常时也必须执行的代码。控制总是传递给finally块,与try块的退出方式无关。

    catch用于处理语句块中出现的异常,而finally用于保证代码语句块的执行,与前面的try块的退出方式无关

    在下面的例子中,由一个导致异常的无效转换语句。当运行语句时,受到一条运行时的错误信息,但finally子句仍继续执行并显示输出

    public class MainClass

    {

      static void Main()

      {

        int i=123;

        string s="Some String";

        boject o=s;

        try

        {

          //无效转换

          i=(int)o;

        }

        finally

        {

          Console.Write("i={0}",i);

        }

      }

    }

    上面的示例将导致引发System.InvalidCastException.

    尽管捕捉了异常,但仍会执行finally块中包含的输出语句,即:

    i=123;

    3 try-catch-finally

    catch和finally一起使用的常见方式是:在try块中捕获并使用资源,在catch块中处理异常情况,并在finally块中释放资源

    static void Main(strnig[]args)

    {

      try

      {

        Console.WriteLine("Enter a number");

        int i=int.Parse(Console.ReadLine());

      }  

      catch(OverflowException caught)

      {

        Console.WriteLine(caught);

      }

      finally

      {

        Console.WriteLine("Try block final.");

      }

    }

    运行结果如下:

    Enter a number

    未经处理的异常:System.FormatException:输入字符串的格式不正确。

    下面做个小测试,看看最终a 的值是多少

    int a=2;

    try

    {

      int i=int32.Parse("s);

    }

    catch

    {

      a=1;

      return;

    }

    finally

    {

      a=3;

    }

    如果你现在还在思考和计算,说明你对异常的机制还没有太明确。其实只要看finally块里面就能知道,不管前面是什么,最终a的值一定是3

  • 相关阅读:
    使用国内镜像安装pyqt5
    python线程池 ThreadPoolExecutor 的用法及实战
    进程和线程、协程的区别
    python线程池实现
    python 多进程使用总结
    参与开源项目
    脑图——前端技术
    HTML中DTD使用小结
    浅谈面向对象——追溯法
    Dva.js 里面的几个概念
  • 原文地址:https://www.cnblogs.com/yk1992/p/3587644.html
Copyright © 2011-2022 走看看