C#之异常处理

  • 必要性
    异常是对程序运行时出现的特殊情况的一种响应,不至程序崩溃。
  • 关键词
    try: 加在有可能有执行异常的代码前,形成try语块,后跟一个或多个 catch 块。
    catch:表示异常的捕获。
    finally:finally 块用于执行给定的语句,不管异常是否被抛出都会执行。例如,如果您打开一个文件,不管是否出现异常文件都要被关闭。
    throw:当问题出现时,程序抛出一个异常。使用 throw 关键字来完成。
  • 语法
try
{
   // 引起异常的语句
}
catch( ExceptionName e1 )
{
   throw e1;
}
catch( ExceptionName e2 )
{
   // 错误处理代码
}
catch( ExceptionName eN )
{
   // 错误处理代码
}
finally
{
   // 要执行的语句
}
  • C#中的异常类
    C# 异常是使用类来表示的。
    C# 中的异常类主要是直接或间接地派生于 System.Exception 类。System.ApplicationException 和 System.SystemException 类是派生于 System.Exception 类的异常类。
    System.ApplicationException 类支持由应用程序生成的异常。所以自定义的异常都应派生自该类。
    System.SystemException 类是所有预定义的系统异常的基类。
异常类								描述
System.IO.IOException				处理 I/O 错误。
System.IndexOutOfRangeException		当方法指向超出范围的数组索引时的错误。
System.ArrayTypeMismatchException	处理当数组类型不匹配时生成的错误。
System.NullReferenceException		处理当依从一个空对象时生成的错误。
System.DivideByZeroException		处理当除以零时生成的错误。
System.InvalidCastException			处理在类型转换期间生成的错误。
System.OutOfMemoryException			处理空闲内存不足生成的错误。
System.StackOverflowException		处理栈溢出生成的错误。
  • 实例
using System;
namespace ErrorHandlingApplication
{
    class DivNumbers
    {
        int result;
        DivNumbers()
        {
            result = 0;
        }
        public void division(int num1, int num2)
        {
            try
            {
                result = num1 / num2;
            }
            catch (DivideByZeroException e)
            {
                Console.WriteLine("Exception caught: {0}", e);
            }
            finally
            {
                Console.WriteLine("Result: {0}", result);
            }

        }
        static void Main(string[] args)
        {
            DivNumbers d = new DivNumbers();
            d.division(25, 0);
            Console.ReadKey();
        }
    }
}

简单一点,可以直接定义一个Exception类对象,打印出其Message属性,一般有同样的效果,如下:

 catch(Exception e)
            {
              Console.WriteLine(e.Message);
            }
  • 自定义异常类
    自定义的异常类是派生自 ApplicationException 类。如下定义了 TempIsZeroException异常类
public class TempIsZeroException: ApplicationException
{
   public TempIsZeroException(string message): base(message){}
   public TempIsZeroException(string message, Exception inner) : base(message, inner) { }
   
}

调用如下:

 static void Main(string[] args)
            {
                try
                {
                    //throw new Exception();
                    throw new TempIsZeroException("信息不符合");
                }
                catch (TempIsZeroException ex)
                {
                    Console.WriteLine(ex.Message);
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.Message + "123");
                }

                Console.ReadKey();
            }
        }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值