zoukankan      html  css  js  c++  java
  • C# -- 异常(一)

    Try语句

    1:try 语句指定了用来进行错误处理或清理的一个代码块。

    2:try 语句块后边必须紧接着一个 catch 块或者是一个 finally 块,或者两者都有。

    3:当 try 块里发生错逞的时候, catch  块就会被执行。

    4:finally 块会在执行完 try 块之后执行,如果 catch 也执行了,那就在 catch 块后边执行。finally 块用来执行一些清理代码,无论是否有错误发生。

    catch语句

    1:Catch块可以访问一个 Exception对象,这个 Exception对象里含有关于错误的信息。

    2:Catch 块通常被用来对错误进行处理/补偿或者重新抛出异常。 finally

    finally

    1:为你的程序增加了确定性,CLR通常尽力去执行它,它通常用来做一些清理任务,

    如下一段程序:

    这个时候报错程序就终止了,而如果加入try语句和catch语句,程序依旧可以执行完!代码如下:

    当异常被抛出的时候:ClR会执行一个测试,当前是否执行在能够catch异常的try语句里

    如果是:当前执行,就会传递给兼容的catch块里面,如果catch块完成了执行,那么执行会移动到try语句后面的语句,如果有finally块存在,会先执行finally块

    如果不是:执行会返回到函数的调用者并重复这个测试过程(在执行完任何包裹这语句的finally块之后)

    再来仔细聊一聊catch语句:

    catch子句指定要捕获的异常的类型。这个异常必须是system.Exception或其子类

    捕获System.Exception这个异常的话就会捕获所有可能的错误,当处理下面几种情况时,这么做是有用的:

    1:无论是哪种类型的异常,你的程序都可能从错误中恢复

    2:你计划重新抛出异常(可能是在你记录log之后)

    3:你的错误处理器是程序终止运行前的最后一招

    但是在实践中,更典型的情况时:我们要catch特定情况类型的异常(比如上边的例子,使用的是DivideByZeroException),特定情况特定处理,为的是避免处理那些你的处理程序并未针对设计的情况

    你可以,使用多个catch子句来处理多个异常类型。如下:

    上列中,针对给定的异常,只有一个catch子句会被执行,也就是只能看抛出一种具体类型的异常。

    如果你希望一个兜底的catch可以捕获任何类型的异常,那么你需要把特定类型的异常捕获放在靠前的位置。

    如果你不需要访问异常的属性,那么你可以不指定异常变量,如下:

    更甚者,你可以把异常类型和变量都拿掉,这也意味着它会捕获所有异常。如下:

    异常的过滤

    从C#6开始,你可以在catch子句中添加一个when子句来指定一个异常过滤器,如下:

    此例中,如果WebException被抛出的话,那么when后边的bool表达式就会被执行估算,如果计算的结果为false,那么后边的所有的catch子句都会在考虑范围内。如下:

    最后,学一下finally块

    finally块基本上永远都会被执行,无论是否抛出异常,无论try块是否跑完,finally块通常用来写清理代码。

    finally块会在一下情况被执行:

    1:在一个catch块执行完毕

    2:因为跳转语句(例如:return),程序的执行离开了try块

    3:try块执行完毕后

    唯一可以不让finally块执行的东西就是无限循环,或者程序突然结束。如图:

    结果就是:

    using语句

    • 很多类都封装了非托管的资源,例如文件处理、图像处理、数据库连接等。

    • 这些类都实现了IDisposable 接口,这个接口定义了一个无参的 Dispose 方法用来清理这些资源。

    • using 语句提供了一个优雅的语法来在finally块里调用实现了IDisposable 接口对象上的 Dispose 方法。

     

  • 相关阅读:
    Jmeter 指令记录
    做100个用户的并发测试时是不是得要100个用户的账号呀?
    以后可能会遇到的问题记录 .send_keys 无法输入的情况
    Appscan安装问题记录 + 最后问题解决的方法 和安装步骤
    fiddler工具能干啥
    Appscan_web安全测试工具 (含修改启动浏览器的方法)
    解决需要断言多个,其中有断言错误还要继续往下断言其他的方法
    (unittest之装饰器(@classmethod)) 让多个测试用例在一个浏览器里面跑 的方法
    unittest笔记
    另外一种结尾展示方法
  • 原文地址:https://www.cnblogs.com/dcy521/p/13501574.html
Copyright © 2011-2022 走看看