异常处理
异常处理有一个非常典型的结构,即try{}catch(){}finally{}语句,try语句块中运行正常的逻辑,如果正常的逻辑出错,则会去执行catch块中的代码,finally块中的代码不管正常的逻辑是否出错,都会被执行。在C语言的时代是没有异常处理的,C中是通过函数返回值来进行异常处理的,这样的话正常的业务逻辑和错误处理的业务逻辑放在一起,这是一种非常差的程序结构,不易于程序的维护,同时程序的错误会隐藏很深。
下面我们来看一个异常处理的例子,首先不做任何的异常处理
using System;
class Library
{
public static void Print()
{
Console.WriteLine("Hello Guowenhui");
}
}
class Application
{
public static void Main()
{
Library.Print();
Library.Print();
}
}
然后我们在程序库开发的过程中进行异常处理,作为程序库开发人员,应该积极的去抛异常,将异常报告给调用者(应用程序开发人员),作为应用程序开发人员,应该去积极的捕获异常
using System;
class Library
{
public static void Print()
{
try
{
Console.WriteLine("Hello Guowenhui");
}
catch(Exception ex)
{
throw ex; //捕获到异常后将异常抛给调用者
}
}
}
class Application
{
public static void Main()
{
try
{
Library.Print();
Library.Print();
}
catch(Exception ex)
{
Console.WriteLine(ex); //捕获到异常后对异常进行了处理
}
}
}
finally{}语句块主要执行一些资源的清理,如果finally语句后面还有语句,那么着些语句不一定会得到执行,在什么情况下会得到执行了,1.程序没有任何异常。2.程序出现了异常,但是被捕获了,捕获以后可以再抛出,也可以对异常进行处理。总之是要在一切都正常的情况下才会被执行。
异常是API之间的一种通知机制,当异常被触发后就会被抛出,然后通过调用关系向上传播,在更高层被捕获或处理。当然异常被捕获以后也可以不作任何处理,也不再上抛,这就是将异常隐藏起来了,这是一种很危险的处理方式。
异常继承的层次结构,所有的异常类型都继承自Exception,系统异常继承自SystemException,用户自定义异常继承自ApplicationException,同时用户自定义异常和系统异常均继承自Exception
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架