C# 中的异常捕获和处理

2020-09-27 19:11发布

异常是程序运行中发生的错误,异常处理是程序的一部分,错误的出现并不总是编写应用程序员的原因,有事应用程序会因为终端用户的操作而发生错误。无论如何,在编写程序前都应该预测应用程序和代码中出现的错误。

C# 异常处理时建立在四个关键词之上的:try、catch、finally 和 throw。

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

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

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

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

三种异常的处理语句

1.try ... catch //捕获异常

2.try ... finally //清除异常

3.try ... catch ... finally // 处理所有异常

捕获异常:

try

{

//包含容易产生异常的代码

}

catct(异常类 ,异常实例对象)

{

//异常处理代码

}


namespace 捕获异常

{

    class Program

    {

        static void Main(string[] args)

        {

            //利用 try catch 语句捕获数组越界问题

            int[] arr = { 0, 1, 2, 3, 1, 2, 3, 3, 4, 5 };

            try

            {

                for (int i = 0; i <= arr.Length; i++)

                {

                    Console.Write(arr[i] + " ");

                }

            }

            catch(Exception myex)

            {

                //Message.Tostring()中的Message是获取描述当前异常消息

                Console.WriteLine(myex.Message.ToString());

            }

            //此语句虽然可以给出异常提示,并不能智能描述异常的原因

            //catch { Console.WriteLine("发生异常"); }

            Console.ReadKey();

        }

    }

}


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

清除、处理所有异常

如果用户对产生错误不进行处理,而消除产生的错误分配的资源

try

{

// 包含容易产生异常的代码

}

finally

{

//用于消除try 块中分配的任何资源以及 运行任何即使在发生异常时也必须执行的代码

}

最好的组合,合并两种错误处理技术,即捕获错误、消除并继续执行应用程序

try

{

//包含容易产生异常的代码

}

catct(异常类 ,异常实例对象)

{

//异常处理代码

}

finally

{

//用于消除try 块中分配的任何资源以及 运行任何即使在发生异常时也必须执行的代码

}

注意:处理异常会大大地降低性能,不妥将他用在控制正常程序流程中,如采用有可能检测到代码中 导致异常的状态,请执行这种操作。 不妥在处理该状态之前捕获异常本是,如除一个数时,可通过if先判断数据不等0,然后在进行相除。

引发异常

在编写程序是,有事肯要引发异常,以便捕获异常

引发异常的格式为:

throw new 异常类(异常信息);

异常类 :预定义,自定义

异常信息:字符串“格式转换错误”

实例 :

为Program 类定义一个将字符串转换成整数的私有静态方法StringToInt;它含有一个字符串类型参数,返回一个整数,然后通过这个使用方法将一个不能转换成整数的字符串转换成整数故而引发异常,


namespace 引发异常

{

    class Program

    {

        private static int StringToInt(string mystr) {

        int outnum = 0;

        try

        {

            outnum = Convert.ToInt32(mystr);

            return outnum;

        }

        catch

        {

            throw new FormatException("格式不正确(自己写的)");

        }

}

    static void Main(string[] args)

    {

        string str = "51zxw";

        try

        {

            Console.WriteLine(StringToInt(str));

        }catch(FormatException ex)

        {

            Console.WriteLine(ex.Message.ToString());

        }

            Console.ReadKey();

        }

    }

}


预定义异常类

自定义异常类

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

声明异常的格式:

class 自定义的异常了吗:Exception{}

引发异常格式

throw(自定义异常类名)



作者:Czhenya

链接:https://blog.csdn.net/Czhenya/article/details/76315919

来源:CSDN
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。