zoukankan      html  css  js  c++  java
  • C#异常处理机制初步

    原地址:http://www.sudu.cn/info/html/edu/net/20071227/50446.html

    一、c#的异常处理所用到关键字 

    try 用于检查发生的异常,并帮助发送任何可能的异常。 

    catch 以控制权更大的方式处理错误,可以有多个catch子句。 

    finally 无论是否引发了异常,finally的代码块都将被执行。 

    throw 用于引发异常,可引发预定义异常和自定义异常。 

    二、c#异常处理的格式 

    try 



    程序代码块; 



    catch(exception e) 



    异常处理代码块; 



    finally 



    无论是否发生异常,均要执行的代码块; 





    三、异常处理实战 

    一个除数和零的简单例子: 

    public class divisoriszero 



    private static void main() 



    int dividend=10; 

    int divisor1=0; 

    int divisor2=5; 

    int dividevalue; 

    try 



    dividevalue=dividend/divisor1; //(1) 

    //dividevalue=dividend/divisor2; //(2) 

    system.console.writeline("dividevalue={0}",dividevalue);//(3)这一行将不会被执行。 



    catch 



    system.console.writeline("传递过来的异常值为:{0}",e); 



    finally 



    system.console.writeline("无论是否发生异常,我都会显示。"); 









    注:(1)行被执行则会抛出一个异常,如果没有catch语句,程序会异常终止,使用不带参数的catch子句,则可以捕获任意类型的异常。 

    如果将(1)行注释掉,启用(2)行,这意味该程序运行时不会出现异常,从输出可知,finally代码块仍将被执行。 



    可以给try语句提供多个catch语句,以捕获特定的异常,如上例中:0作为除数则会引发dividebyzeroexception类型的异常,上例中的catch语句可以作如下修改: 

    catch(dividebyzeroexception e) 



    system.console.writeline("零不能作为除数!异常值为:\n{0}",e); 



    catch(exception e) 



    system.console.writeline("并非\零作为除数引发的异常\"!异常值为:\n{0}",e); 



    为什么还要加上一个catch(exception e)子句呢?原因很简单,catch(dividebyzeroexception e)子句只能捕获特定的异常,try内的程序代码可能还会产生其它的异常,这些异常只能由catch(exception e)来捕获了。 

    下表给出了一些常见的异常: 



    system名称空间中常用的异常类 



    异常类名称 简单描述 

    memberaccessexception 访问错误:类型成员不能被访问 

    argumentexception 参数错误:方法的参数无效 

    argumentnullexception 参数为空:给方法传递一个不可接受的空参数 

    arithmeticexception 数学计算错误:由于数学运算导致的异常,覆盖面广。 

    arraytypemismatchexception 数组类型不匹配 

    dividebyzeroexception 被零除 

    formatexception 参数的格式不正确 

    indexoutofrangeexception 索引超出范围,小于0或比最后一个元素的索引还大 

    invalidcastexception 非法强制转换,在显式转换失败时引发 

    multicastnotsupportedexception 不支持的组播:组合两个非空委派失败时引发 

    notsupportedexception 调用的方法在类中没有实现 

    nullreferenceexception 引用空引用对象时引发 

    outofmemoryexception 无法为新语句分配内存时引发,内存不足 

    overflowexception 溢出 

    stackoverflowexception 栈溢出 

    typeinitializationexception 错误的初始化类型:静态构造函数有问题时引发 

    notfinitenumberexception 无限大的值:数字不合法 



    四、定义自己的异常类 

    除了预定义的异常外,我们还可以创建自己的异常,过程比较简单: 

    ㈠声明一个异常,格式如下: 

    class exceptionname:exception{} 

    ㈡引发自己的异常: 

    throw(exceptionname); 



    看一个例子: 

    class iamsecondgrade:system.exception{}//声明异常 



    class secondgrade 



    public static int mul(int first,int second) 



    if(first>100||second>100) 

    throw new iamsecondgrade();//引发异常 

    return (first*second); 





    public static void main() 



    int mul_value; 

    try 



    mul_value=mul(ArrayArray,56); 

    system.console.writeline("ArrayArray与56积为:{0}",mul_value); 

    mul_value=mul(101,4); 

    system.console.writeline("出现异常,这行是不会被执行的。"); 



    catch(iamsecondgrade)//捕获自定义的异常 



    system.console.writeline("我才上二年级,超过100的乘法我不会。嘿嘿,我自定义的异常。"); 



    catch(system.exception e) 



    system.console.writeline("非自定义异常。其值为:{0}",e); 









  • 相关阅读:
    在C#代码中应用Log4Net(二)典型的使用方式
    在C#代码中应用Log4Net(一)简单使用Log4Net
    Windows Azure Active Directory (2) Windows Azure AD基础
    Windows Azure Virtual Network (6) 设置Azure Virtual Machine固定公网IP (Virtual IP Address, VIP) (1)
    Windows Azure Active Directory (1) 前言
    Azure China (6) SAP 应用在华登陆 Windows Azure 公有云
    Microsoft Azure News(3) Azure新的基本实例上线 (Basic Virtual Machine)
    Microsoft Azure News(2) 在Microsoft Azure上运行SAP应用程序
    Microsoft Azure News(1) 新的数据中心Japan East, Japan West and Brazil South
    Windows Azure HandBook (2) Azure China提供的服务
  • 原文地址:https://www.cnblogs.com/123ing/p/3789186.html
Copyright © 2011-2022 走看看