(三十七)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类派生的。
- System.ApplicationException类支持由程序产生的异常,因此我们自定义的异常都应继承此类;
- 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
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了