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();

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

  

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

总结:

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

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 38
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 38
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值