zoukankan      html  css  js  c++  java
  • 用户自定义异常

    用户自定义异常

    一般情况下,我们使用系统内部提供的异常就足够了,但是有时为了特殊的目的,必须使用用户自定义异常,本文讨论的异常处理机制,以及如何创建、抛出和捕获用户自定义异常。

    1.     异常处理机制

    无论我们使用的是系统自动义异常,还是用户自定义异常,它们都具有相同的异常处理机制,都包括定义异常类、抛出异常对象和捕获并处理异常三部分,只不过是前两个过程已经在.NET框架中定义好了。

    a)     定义异常类

    异常类本身和一般的类的定义没有任何区别,但是由于使用Throw关键字和catch关键字所抛出和捕获的异常对象必须是Exception类或者Exception类子类的子类对象,因此所有用户自定义的异常类必须由Exception类或者Exception类的子类派生。

    b)    抛出异常对象

    由于异常属于意外事件,并不是总是发生,必须有一个条件判断语句if(满足抛出异常条件);然后再抛出异常throw new Excrption

    如下例:

    If(y == 0)//如果被除数为零

    {

          Throw new DivideByZeroException();//抛出DivideByZeroException异常类对象;

    }

    c)     捕获并处理异常

    catch关键字用于捕获在try程序块中所引发的异常,根据该关键字所携带的参数列表的不同具有多种重载方式,但是所有的catch重载块最多只有一个被执行。

     如下例:

    catch(DivideByZeroException dz)

    {

       Console.WriteLine(dz.ToStirng());

    }

    用户自定义异常类

    所有的用户自定义异常类都必须由Exception类或者Exception类的子类派生,所以必须显示指明异常类的基类

    public class MyException:Exception// MyException这个类是Exception 的子类;但是如果是public class MyException: DivideByZeroException,则MyException是DivideByZeroException类的子类。

    不能重写父类的无参数的构造方法

    给MyException添加字段

    string _Mes;用于保存自定义的异常提示信息

    给MyException添加无参数的构造方法

          public MyException()

          {

            Console.WriteLine("发生了异常");

          }

    给MyException添加一个参数的构造方法

          public MyException(string msg)

          {

            _Mes = msg;     

            //Console.WriteLine("发生了异常");

          }

    给MyException添加两个个参数的构造方法,并且指明使用父类的两个参数的构造方法。

          public MyException(string msg,MyException e):base(msg,e)

          {

            _Mes = msg;

            Console.WriteLine(e.Message);      

            //Console.WriteLine("发生了异常");

          }

    重写父类的Message属性

          public override string Message

          {

            get

            {

               return _Mes;

            }

          }

    添加自己的异常处理类的一个新方法。

          public void Mess()

          {

            Console.WriteLine("笨蛋,除数为零了!");

          }

    总之,定义异常类和定义一个普通类的方法是一致的。

    抛出用户自定义异常

    public class Test//定义一个,在div方法中抛出一个异常对象

       {

          public static float div(int x,int y)//在C#语言中不能够使用类似Java的Throws关键字

          {

            if(y == 0)//判断抛出异常的条件

            {

               throw new MyException("笨蛋,除数为零了!.....................");//抛出一个带有自己定义信息的异常对象

            }

             else

            {

               return (float)x/(float)y;

            }

          }

       }

    捕获并处理异常对象

    Try//所有的可能引发异常的语句都必须放在try块中 

            {

               Test.div(b,a);//方式异常的语句之后的所有代码将要放弃执行;

            }

            catch( MyException me )

            {

               Console.WriteLine(me.Message);

               throw new MyException(me.Message,me);

            }

            catch(DivideByZeroException dz)

            {

            }

            catch(Exception ex)

            {         

               Console.WriteLine(ex.ToString());//捕获异常对象后,可以调用对象的任何方法。

              

            }

            Finally//一般情况下Finally代码块将要一定被执行

            {

               Console.WriteLine("finish!");

            }

  • 相关阅读:
    [NodeJS] Node.js 编码转换
    [SublimeText] 如何创建工程
    浏览器 user-agent 字符串的故事
    [Ubuntu] geoip-bin 程序包
    在 Ubuntu 中安装 MySQL 指南
    在 Ubuntu 13.10 安装 PyCharm 3.0.1 & Oracle JDK
    [Command] lrzsz
    [Linux] 如何修改 Linux 主机名
    如何在 Ubuntu 中安装 Node.js
    [Linux] 修改用户名密码
  • 原文地址:https://www.cnblogs.com/lingyi1111/p/4430369.html
Copyright © 2011-2022 走看看