(三十七)C#编程基础复习——C#异常处理

在C#中,异常是在程序运行出错时引发的,例如一个数字除以零,所有异常都派生自System.Exception类。异常处理则是处理运行时错误的过程,使用异常处理可以使程序在发生错误时保持正常运行。

C#中的异常处理基于四个关键字构建,分别是try、catch、finally和throw。

try:try语句块中通常用来存放容易出现遗产的代码,其后面紧跟一个或多个catch语句块;

catch:catch语句块用来捕获try语句块中的出现的异常;

finally:finally语句块用于执行特定的语句,不管异常是否被抛出都会执行;

throw:throw用来抛出一个异常;

假设一段代码引发了异常,则可以使用try和catch组合来捕获这个异常,其语法格式如下所示:

 

try{
    //引起异常的雨具
}catch(ExceptionName e1)
{
    //错误处理代码
}catch(ExceptionName e2)
{
    ...
}finally{
    //要执行的语句
}

如上所示,可以列出多个catch语句块来捕获不同类型的异常,以防止try语句块在不同的情况下产生多个异常。

一、示例

namespace _038
{
    internal class Program
    {
        static void Main(string[] args)
        {

            try
            {
                int a = 123;
                int b = 0;
                int x = a / b;
            }
            catch(Exception e)
            {
                Console.WriteLine("捕获到的异常:{0}",e);
            }
            finally
            {
                Console.WriteLine("finally语句块中的代码");
            }
            Console.WriteLine("程序中的其他代码");
            Console.ReadKey();
        }
    }
}

运行结果:

二、C#中的异常类

C#中的异常类主要从System.Exception派生类的,比如System.ApplicationException和System.SystemException两个异常类就是从System.Exception类派生的。

  1. System.ApplicationException类支持由程序产生的异常,因此我们自定义的异常都应继承此类;
  2. System.SystemException类是所有系统预定义异常的基类。

示例代码:自定义异常类,除了可以使用系统预定义的异常类外,我们还可以自行定义异常类,自定义的异常类都应继承System.ApplicationException类。

namespace _039
{
    internal class Program
    {
        static void Main(string[] args)
        {
            TestUserDefineException test = new TestUserDefineException();
            try
            {
                test.validate(12);
            }
            catch(InvalidAgeException e)
            {
                Console.WriteLine("InvalidAgeException:{0}",e);
            }
            Console.WriteLine("其他代码");
            Console.ReadKey();
        }
    }
    public class InvalidAgeException:ApplicationException
    {
        public InvalidAgeException(string message) : base(message)
        {
        }
    }
    public class  TestUserDefineException
    {
        public void validate(int age)
        {
            if(age<18)
            {
                throw (new InvalidAgeException("sorry,age must be greater than 18"));
            }
        }
    }
}

运行结果:

三、抛出异常

如果异常是直接或间接派生自Syste.Exception类,则可以在catch语句块中使用throw语句抛出该异常,所谓抛出异常这里可以理解为重新引发该异常。throw语句的语法如下:

catch(Exception e)
{
    ...
    Throw e
}

 

posted @   代号六零一  阅读(39)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示