C# 中的异常捕获和处理

举报
陈言必行 发表于 2021/08/13 22:56:13 2021/08/13
【摘要】 异常是程序运行中发生的错误,异常处理是程序的一部分,错误的出现并不总是编写应用程序员的原因,有事应用程序会因为终端用户的操作而发生错误。无论如何,在编写程序前都应该预测应用程序和代码中出现的错误。 C# 异常处理时建立在四个关键词之上的:try、catch、finally 和 throw。     &n...
异常是程序运行中发生的错误,异常处理是程序的一部分,错误的出现并不总是编写应用程序员的原因,有事应用程序会因为终端用户的操作而发生错误。无论如何,在编写程序前都应该预测应用程序和代码中出现的错误。

C# 异常处理时建立在四个关键词之上的:trycatchfinally 和 throw

        try:一个 try 块标识了一个将被激活的特定的异常的代码块。后跟一个或多个 catch 块

        catch:程序通过异常处理程序捕获异常。catch 关键字表示异常的捕获

        finally:finally 块用于执行给定的语句,不管异常是否被抛出都会执行。例如,如果您打开一个文件,不管是否出现异常文件都要被关闭

        throw:当问题出现时,程序抛出一个异常。使用 throw 关键字来完成。


三种异常的处理语句
1.try ... catch //捕获异常
2.try ... finally //清除异常
3.try ... catch ... finally // 处理所有异常

捕获异常:
try
{
        //包含容易产生异常的代码
}
catct(异常类 ,异常实例对象)
{
        //异常处理代码
}

   
  1. namespace 捕获异常
  2. {
  3.     class Program
  4.     {
  5.         static void Main(string[] args)
  6.         {
  7.             //利用 try catch 语句捕获数组越界问题
  8.             int[] arr = { 0, 1, 2, 3, 1, 2, 3, 3, 4, 5 };
  9.             try
  10.             {
  11.                 for (int i = 0; i <= arr.Length; i++)
  12.                 {
  13.                     Console.Write(arr[i] + " ");
  14.                 }
  15.             }
  16.             catch(Exception myex)
  17.             {
  18.                 //Message.Tostring()中的Message是获取描述当前异常消息
  19.                 Console.WriteLine(myex.Message.ToString());
  20.             }
  21.             //此语句虽然可以给出异常提示,并不能智能描述异常的原因
  22.             //catch { Console.WriteLine("发生异常"); }
  23.             Console.ReadKey();
  24.         }
  25.     }
  26. }


用户不能获得对异常对象的访问,而该对象含 有重要的出错星星,也就不能得到出错的信息。

清除、处理所有异常
如果用户对产生错误不进行处理,而消除产生的错误分配的资源
try
{
        // 包含容易产生异常的代码
}
finally
{
        //用于消除try 块中分配的任何资源以及 运行任何即使在发生异常时也必须执行的代码
}

最好的组合,合并两种错误处理技术,即捕获错误、消除并继续执行应用程序
try
{
        //包含容易产生异常的代码
}
catct(异常类 ,异常实例对象)
{
        //异常处理代码
}
finally
{
        //用于消除try 块中分配的任何资源以及 运行任何即使在发生异常时也必须执行的代码
}
注意:处理异常会大大地降低性能,不妥将他用在控制正常程序流程中,如采用有可能检测到代码中 导致异常的状态,请执行这种操作。 不妥在处理该状态之前捕获异常本是,如除一个数时,可通过if先判断数据不等0,然后在进行相除。

引发异常
在编写程序是,有事肯要引发异常,以便捕获异常
引发异常的格式为:
throw new 异常类(异常信息);
异常类 :预定义,自定义
异常信息:字符串“格式转换错误”
实例 :
为Program 类定义一个将字符串转换成整数的私有静态方法StringToInt;它含有一个字符串类型参数,返回一个整数,然后通过这个使用方法将一个不能转换成整数的字符串转换成整数故而引发异常,

   
  1. namespace 引发异常
  2. {
  3.     class Program
  4.     {
  5.         private static int StringToInt(string mystr) {
  6.         int outnum = 0;
  7.         try
  8.         {
  9.             outnum = Convert.ToInt32(mystr);
  10.             return outnum;
  11.         }
  12.         catch
  13.         {
  14.             throw new FormatException("格式不正确(自己写的)");
  15.         }
  16. }
  17.     static void Main(string[] args)
  18.     {
  19.         string str = "51zxw";
  20.         try
  21.         {
  22.             Console.WriteLine(StringToInt(str));
  23.         }catch(FormatException ex)
  24.         {
  25.             Console.WriteLine(ex.Message.ToString());
  26.         }
  27.             Console.ReadKey();
  28.         }
  29.     }
  30. }


预定义异常类

异常类 说明
Exception 所有异常对象的基类
SystemException 运行时产生的所有错误的基类
IdexOutOfRangeExceptiom 当数组的下标超出范围时运行时引发
NullRefereceException 当一个空对象被引用时运行时引发
ArgunmentException 所有参数异常的基类
InvalidCastException 类型的显示转换在运行是失败时,就会引发异常
ArrayTypeMismathException 当存储一个数组是,如果由于被存储的元素实际类型与数组的实际类型不兼容而导致存储失败就会引发此异常
ArithmeticException 算术运算期间异常发生的基类
DivideByZeroException 试图除以0引发
OverflowException 溢出时引发
FormatException 参数格式无效是引发

自定义异常类
C#语言虽然预定义了许多异常类,但是,在有些场合,创建自己的异常类可能会方便。自定义异常类是通过继承System.Excetion类来创建自己的异常

声明异常的格式:
class 自定义的异常了吗:Exception{}
引发异常格式
throw(自定义异常类名)

文章来源: czhenya.blog.csdn.net,作者:陈言必行,版权归原作者所有,如需转载,请联系作者。

原文链接:czhenya.blog.csdn.net/article/details/76315919

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。