C#每日一课(二十四)

C#异常处理
C#的异常是指在程序运行时出现的特殊情况。异常处理则是对出现异常情况的的处理方式,把程序当前的控制权从某个部分转移到另一个部分方式。
C#异常处理需要注意如下四个关键字
try,catch,finally,throw

  • try
    try块标识了一个将被激活的特定异常的代码块,其后跟一个或多个catch块

  • catch
    程序通过异常处理来捕获异常,catch中指定了要捕获的异常

  • finally
    finally块是对于不管异常是否会被抛出都会执行的语句,比如在做数据库处理时不管在处理中是否异常都要最终关闭掉打开的数据库连接

  • throw
    当出现问题时可以用throw来抛出一个异常

  • 语法结构

try
{
	//引起异常的语句内容
}
catch(ExceptionName1 e1)
{
	//捕获到ExceptionName1异常后需要进行的处理代码
}
catch(ExceptionName2 e2)
{
	//捕获到ExceptionName2异常后需要进行的处理代码
}
finally
{
	//必须要执行的代码
}
  • C#中的异常类
    C#中异常类的根类是:System.Exception
    从上面这个根类派生出来两个
    System.ApplicationException
    System.SystemException

  • System.ApplicationException类
    支持由应用程序生成的异常,程序员在定义自己的异常的时候都应从这个类派生出新的异常类

  • System.SystemExcepiton类
    这个类是所有预定义的系统异常的基类
    从System.SystemException类派生出来的类有

  • System.IO.IOExcepiton
    处理I/O错误的异常类

  • System.IndexOutOfRangeException
    处理当方法指向超出范围的数组索引时产生的异常

  • System.ArrayTypeMismatchException
    处理当数组类型不匹配时生成的错误

  • System.NullReferenceException
    处理当引用一个空对象进行操作时的异常

  • System.DivideByZeroException
    处理当除以零时产生的异常

  • System.InvalidCastException
    处理当类型转换时产生的异常

  • System.OutOfMemoryException
    处理当内存空间不足时产生的异常

  • System.StackOverflowException
    处理栈溢出时产生的异常

  • C#中的异常处理方式
    C#使用try和catch块的形式提供了一种结构化的异常处理方案,这样的话可以把核心程序语句与错误处理语句分开处理。

使用Visual Studio新建C#控制台应用程序chapter19_001
新增类Div

class Div
    {
        int result;
        public Div()
        {
            result = 0;
        }

        public void division(int num1, int num2, out int result)
        {
              result =  num1 / num2;
        }

    }

在Main方法中添加如下测试代码

int result = 0;
Div d = new Div();
try
{
      d.division(20, 0, out result);
}
catch (DivideByZeroException e1)
{
       Console.WriteLine("error:" + e1.Message);
}
finally
{
       Console.WriteLine("运行结束");
       Console.WriteLine("result = {0}", result);
}
Console.ReadKey();

编译运行结果如下:
编译运行结果

  • 创建用户自定义异常
    用户自定义自己的异常类,是派生自ApplicationException类。
    新增自定义异常类NotNumberException
class NotNumberException : ApplicationException
{
        public NotNumberException(string message) : base(message)
        {
        }
}

Main方法中添加如下测试自定义异常的代码:

//测试自定义异常
Console.WriteLine("---------------测试自定义异常---------------");
Regex reg = new Regex("[0-9]{1,}");
Console.WriteLine("请输入一个数字:");
string num  = Console.ReadLine();
       try
       {
            while (true)
            {
                 if (reg.IsMatch(num))
                 {
                    Console.WriteLine("输入的是一个数字,数字为:{0}", num);
                    Console.WriteLine("请输入一个数字:");
                     num = Console.ReadLine();
                  }
                  else
                  {
                    throw new NotNumberException("输入的不是一个数字");
                   }
               }
            }
         catch (NotNumberException e)
         {
             Console.WriteLine("error:" + e.Message);
         }

编译运行的结果如下:
编译运行结果

  • 异常对象抛出
    如果异常是直接或者间接派生自System.Exception类,可以抛出一个对象,在catch语句中可以抛出当前对象。
catch(Exception e)
{
	//捕获异常后的处理代码
	throw e;	//抛出当前异常对象
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值