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

    异常介绍

    1、System.Exception类

    Message属性:发生异常的原因和异常的内容

    Souce属性:抛出异常程序集的名称

    StackTrace属性:发生异常的方法调用情况

    InnerException属性:次异常中包含的异常

    2、try{}catch{}finally{}

    处理异常

    a、不带参数的catch和catch(Exception)是有区别的

         catch(Exception)可以捕获所有以Exception类派生的异常。

         catch()可以捕获所有异常,不管异常是不是从Exception类派生。

    b、与catch配套的catch和finally是可选的,但二者必选其一。一个try可对应多个catch,但一个try只能对应一个finally。

    c、不论try中是否发生异常,finally中的语句一定会被执行。(如果异常,finally会在catch中的return前执行,然后才执行catch中的return)

    捕获异常:

    1.将有可能出错的代码放入try中

    2.如果发生异常,执行catch

    catch的几种写法:

     a. catch(){ } 捕获所有异常

     b.catch(Exception ex){ } 捕获所有异常,附送异常参数e

     c.catch(InvalidOperationException e){ } 只捕获从Exception派生出的InvalidOperationException类型异常,其他类型不处理。

      这类方式可以有多个catch,前面写几个具体可能出现的异常类型,最后写一个catch(){}来捕获所有异常,可以提高执行效率,一开始能把具体异常处理了最好。(小弟先出马,老大最后)

      如果有catch则处理(可以throw e向上抛出异常),没catch向上级调用抛出异常,如果上级也没catch则向用户抛出异常黄页 (调试时程序中断运行,部署时终止)。

    异常传播

    如果异常发生后,没有被相应的catch捕获,那么异常将沿调用堆栈逐渐向上传递,直到遇到合适的catch语句或传递到最底层的调用方法为止。如都没有找到相应的catch,则异常交付.net公共语言运行时,公共语言运行时弹出一个对话框来显示异常信息。

    抛出异常throw

    1、throw 变量名;

    必须是Exception异常或有Exception派生的类型

    2、throw;

    这个throw语句只有一个throw关键字,只能用在catch语句块中,该语句的意思是抛出当前catch语句所捕获的异常。

    自定义异常 遵循原则

    1、避免使用深的异常类继承层次结构

    2、自定义异常类必须继承System.Exception类或其他几种基本常见异常类

    3、自定义异常类名称要以Exception结尾

    4、自定义异常类应该可以序列化

    5、自定义异常类应该至少实现与Exception类相同的以下四个构造函数

    public MyException(){}

    public MyException(string message){}

    public MyException(string message,Exception inner){}

    protected MyException(System.Runtime.Serialization.SerializationInfoinfo,System.Runtime.Serialization.StreamingContext context){}

    6、自动插入自定义异常类框架

    在编辑器中输入Exception并按键,即可得到自定义异常类框架。

    总结:
    try {  } //执行的代码,其中可能有异常。一旦发现异常,则立即跳到catch执行。否则不会执行catch里面的内容
    catch { } //除非try里面执行代码发生了异常,否则这里的代码不会执行。
    finally { } //不管什么情况都会执行,包括try catch 里面用了return ,可以理解为只要执行了try或者catch,就一定会执行 finally。

    站外扩展:

    C#异常处理详细文章>>

    try catch finally的执行顺序

  • 相关阅读:
    第一章-实例7-猴子吃桃问题
    第一章-实例6-判断是否为闰年
    第一章-实例3-计算变量所占字节数
    IDEA学习笔记
    spring boot学习概要(尚硅谷)
    JSP动态WEB开发技术--第一章
    学习前端的准备任务
    cmd优化
    软件测试基础概念
    软件工程理论
  • 原文地址:https://www.cnblogs.com/zxx193/p/3368378.html
Copyright © 2011-2022 走看看