C#中类的异常处理详解
作者:Andy阿辉 发布时间:2023-02-21 17:25:01
前言
日常编码过程中,最重要的技能不是说你学会使用很多最新的编程技术或者做出一个高大上的系统。而是你在写代码过程中,对异常的处理,是否系统可以稳定,健壮。
对于异常的处理在C#中是通过try/cath机制来捕获的,接下来我们一起来看看。
异常是程序中的运行时错误,它违法了系统约束或应用程序约束,或出现了在正常操作时未预料的情形。
比如对于某些变量的非正常赋值或者在参与运算操作时出现错误等。
异常
关于异常,在C#中通过try语句和处理异常机制类保证异常的捕获,防止由于异常的未捕获导致整个程序出现异常提醒,甚至出现崩溃。
异常的要求
try块包含为避免出现异常而被保护的代码
catch子句部分含有一个或多个catch子句。(处理异常代码段也叫做异常处理子程序)
finally块含有在所有情况下都要被执行的代码,无论有没有异常发生
class Program
{
static void Main(string[] args)
{
try
{
//验证是否有异常的代码
Ahui hui = new Ahui();
InfoBase info = (InfoBase)hui;
Console.WriteLine(hui.GetInfo());
Console.WriteLine(info.GetInfo());
}
catch (Exception ex)
{
//捕获异常,进行异常的处理
throw new Exception("异常向上一层抛出!");
}
Console.ReadKey();
}
}
在处理业务代码时,必须在刚开始就将逻辑上的错误都考虑清楚进行验证处理,比如判空,非正常值,值类型错误等。
其次在通过try/catch机制来捕获非正常的异常,防止程序出现无法把控的错误,导致奔溃。
提示:在业务程序中尽量少用异常进行捕获,如果条件满足要第一时间对异常进行前期处理。<Catch()中的异常处理时间会比较长,而且会导致系统资源被浪费(异常实时被往上抛出)。>
在C#中有很多不同类型的异常可能被发生,BCL定义了许多类,每一个类代表一个指定的异常类型。当一个异常发生时,CLR首先创建该类型的异常对象,其次寻找适当的catch子句以处理它。(所有的异常类都派生自System.Exception类)
关于catch()有三种形式,可以处理不同级别的异常。
第一种 一般异常处理
try
{
}
catch
{
//一般异常处理
}
能接受任何异常,但不能确认引起异常的类型。可对可能发生的异常进行普通处理和清理。
第二种 特定异常处理
try
}
catch(Exception)
{
//特定异常处理
}
把一个异常类的名称作为参数,匹配该指定类或派生自它的异常类的异常。
第三种 带对象的特定异常处理
try
}
catch(Exception ex)
{
throw new Exception(ex.Message);
}
可提供关于异常的多种异常信息,匹配指定的异常或派生自它的异常类的异常。通过异常实例,可得到异常的详细信息。
try
}
catch (Exception ex)
{
//特定异常处理
throw new Exception(ex.Message);
}
finally {
//出现异常后的处理机制
}
这里需要特别说明下,关于finally中的代码,不管异常是否被捕获,它都会被执行。
在finally中适合存放释放资源或后续处理的代码。
基础知识日更已经29天,如果大家还想继续,可以给个关注,感谢您的支持。
寄语
人生短暂,我不想去追求自己看不见的,我只想抓住我能看得见的。
来源:https://blog.csdn.net/sinat_23966857/article/details/122952350


猜你喜欢
- 本文实例讲述了Android开发之DatePicker和TimePicker实现选择日期时间功能。分享给大家供大家参考,具体如下:DateP
- 本文实例为大家分享了java贪吃蛇游戏展示的具体代码,供大家参考,具体内容如下1、采用MVC(model、view、control)框架模式
- 效果:一个手指实现(所有手势事件)和(部分事件的);A. 所有手势activity_main.xml<TextView android
- 之前给大家在博文中讲过如何通过eclipse快速搭建SSM开发环境,但相对而言还是有些麻烦的,今天玄武老师给大家介绍下如何使用Intelli
- 关于刮刮卡的实现效果不需要做太多解释,特别是在电商APP中,每当做活动的时候都会有它的身影存在,趁着美好周末,来实现下这个效果,也算是对零
- 很多时候我们用HTML布局会更方便直接,记录一下。我现在主要是直接调用服务器的网页(实际上是jsp的,只是返回的是html),所以需要联网,
- 在实际的工作中直接使用反射的机会比较少,有印象的就是一次自己做的WinForms小工具的时候利用反射来动态获取窗体上的每个控件,并且为必要的
- 本文实例为大家分享了Android实现录制按钮的具体代码,供大家参考,具体内容如下初始化布局文件中参数private void initPa
- 前言大家应该都有所体会,在android开发中,需要展示图片的地方有很多..正常情况下展示一张图片的时候还需要在下面添加一个文字说明..我们
- 多线程的创建,方式一:继承于Thread类1.创建一个继承于Thread类的子类2.重写Thread类的run()--->将此线程执行
- 本文实例为大家分享了Unity排行榜优化滚动效果的具体代码,供大家参考,具体内容如下自己做的一个优化排行榜的功能,当有大量的数据需要在scr
- 1.一维数组名作为函数参数传递一位数组名,就相当于该数组的首个元素的地址;int a[10];int *p;p=a;//p=a与p=&
- 本文实例讲述了Android编程获取通知栏高度的方法。分享给大家供大家参考,具体如下:这里通过反射机制获取通知栏高度通知栏高度写在dimen
- 目录1. 支付宝支付接口(沙箱实现)1.1 支付宝沙箱账号获取1.2 下载客户端(目前好像只支持Android)1.3 代码配置1. 支付宝
- 打开首页,明显看到链接是https打头,https和http的通信协议差别,在于https安全性更高:http和https的差别很明显,二者
- Springboot获取上下文ApplicationContext在项目中遇到了一个场景,就是通过获得上下文然后获取特定的bean。在此遇到
- 废话不多说了,直接给大家贴代码了。具体代码如下所示:using System;using System.Collections.Generi
- 介绍  日常的业务开发,我们会重复编写一些代码:日期和字符串相互转换、发送Http请求调用接口、拷贝对象
- Java7中文件IO发生了很大的变化,专门引入了很多新的类:import java.nio.file.DirectoryStream;imp
- 本文实例为大家分享了WheelView实现上下滑动选择器的具体代码,供大家参考,具体内容如下1.获得wheelwheel是GitHub上的一