c#异常处理机制

前言

     其实在学习c#视频的时候我们也是都实践过用try-catch实现对于除0和数值不符合规范等的情况异常捕捉,但是对于异常处理机制的系统性的了解我们还不是很深入,将在以后的学习中继续实践和利用。

内容

一:异常处理的结构体

try
{
//获取并使用资源,可能出现异常
}
catch(Exception e)
{
//捕获并处理异常,当出现多个异常且异常类之间有继承关系
}
finally
{
//无论什么情况(即使在catch块中return)下,都会执行该块的代码(如:关闭文件)
//另外需要说明的是,在finally块中使用任何break、continue、return退出都是非法的。
}

详解:

try 用于检查发生的异常,并帮助发送任何可能的异常。 
catch 以控制权更大的方式处理错误,可以有多个catch子句。 
finally 无论是否引发了异常,finally的代码块都将被执行。 
throw 用于引发异常,可引发预定义异常和自定义异常。

二:对于异常的情况处理:
1.不处理
2.在捕捉处进行
3.跳到另一个地方处理(throw):如果没有在捕捉在异常发生的地方进行处理,那么就会存在异常传播。
三:引出异常抛出的情况:

1.尝试被0除

2.数组索引超出了边界
3.请求不能正常完成I/O操作
4.尝试使用空引用。
5.尝试执行违背某种安全措施的操作。

五:用一个简单的例子来实现异常处理

1.普通实现被“0”除的异常:

namespace 异常
{
    class divisor   //定义了一个除法类
    {
        static void Main(string[] args)
        {
            //定义了一系列相关的数
            int dividend = 10;
            int divisor1 = 0;
            int divisor2 = 5;
            int dividevalue;

            try
            {
                dividevalue = dividend / divisor1;  //(1)

                dividevalue=dividend/divisor2; //(2)

                System.Console.WriteLine("dividevalue={0}", dividevalue);//(3)这一行将不会被执行。
            }
            catch (Exception e)
            {

                System.Console.WriteLine("传递过来的异常值为:{0}", e.Message);


            }
            finally
            {

                System.Console.WriteLine("无论是否发生异常,我都会显示。");

            }
            Console.ReadKey();
        }
    }
}
2.自定义的除数异常处理:

namespace 自定义异常
{
    
    public class selfexp : System.Exception { }      //声明异常
    public class divisor    //定义了一个乘积类
    {
        public static int div(int one, int two)    //静态除法函数
        {

            if (one > 100 || two > 100)
                throw new selfexp();      //引发自定义的异常
            return (one /two);
        }


        public static void Main(string[] args)
        {
            int div_value;

            try  //执行方法体,如果有错,将抛出异常。
            {

                div_value = div(3, 1);

                System.Console.WriteLine("99与56积为:{0}", div_value);

                div_value = div(101, 4);

                System.Console.WriteLine("出现异常,这行是不会被执行的。");

            }

            catch (selfexp)//捕获自定义的异常
            {
                System.Console.WriteLine("您输入的数字不合符规范啊,此为自定义的异常!");

            }

            catch (System.Exception e)
            {

                System.Console.WriteLine("非自定义异常。其值为:{0}", e);

            }
            Console.ReadKey();

        }
    }
}
结果就会显示出来:

  c#异常处理机制_第1张图片

   其实通过这两例子的我们就可以发现,exception也是一个异常类,我们也是通过可以继承它来达到捕捉我们想要的异常,这也是面向对象的好处,具有多态性。

总结:

  总之,对于异常处理在我们以后的代码生涯中会经常的使用到,它是一个好东西,可以使我们界面更加的友好,所以在学到了c#异常处理的时候我们应该去好好的思考,真正的去实践它!

 

你可能感兴趣的:(◆编程语言,------【C#基础】)