C#(二十六)之C#异常

异常是在程序执行期间出现的问题。C# 中的异常是对程序运行时出现的特殊情况的一种响应,比如尝试除以零。

异常提供了一种把程序控制权从某个部分转移到另一个部分的方式。C# 异常处理时建立在四个关键词之上的:trycatchfinallythrow

  • try:一个 try 块标识了一个将被激活的特定的异常的代码块。后跟一个或多个 catch 块。
  • catch:程序通过异常处理程序捕获异常。catch 关键字表示异常的捕获。
  • finally:finally 块用于执行给定的语句,不管异常是否被抛出都会执行。例如,如果您打开一个文件,不管是否出现异常文件都要被关闭。
  • throw:当问题出现时,程序抛出一个异常。使用 throw 关键字来完成。

(一):异常的编程的三种结构

1:捕获异常(try_catch)

try {
     Console.WriteLine("请输入分母:");
     int n = Convert.ToInt32(Console.ReadLine());
     double result = 100 / n;
     Console.WriteLine("结果为:" + result);
}catch(DivideByZeroException){ // 输入0
     Console.WriteLine("分母不能为0");
}catch(FormatException){  // 格式异常
     Console.WriteLine("格式错误");
}

这里需要说明一下:catch是可以没有参数的,没有参数就是捕获一切异常。

如果需要知道是因为什么错误导致的异常,就需要带参数。

2:收尾工作(try_catc_finally)

try
            {
                Console.WriteLine("请输入分母:");
                int n = Convert.ToInt32(Console.ReadLine());
                double result = 100 / n;
                Console.WriteLine("结果为:" + result);
            }
            catch (DivideByZeroException)
            { // 输入0
                Console.WriteLine("分母不能为0");
            }
            catch (FormatException)
            {  // 格式异常
                Console.WriteLine("格式错误");
            }
            finally { // 无论是否发生异常,都会走进这里。
                Console.WriteLine("我是finally模块");
            }

3:抛出异常(throw)

try
            {
                Console.WriteLine("请输入分母:");
                int n = Convert.ToInt32(Console.ReadLine());
                if( n > 10){
                    // 手动抛出异常
                    throw new IndexOutOfRangeException();
                }
                double result = 100 / n;
                Console.WriteLine("结果为:" + result);
            }catch(IndexOutOfRangeException e){
                // 接收手动抛出的异常,并显示
                //Console.WriteLine("你输入的整数超出了范围");
                Console.WriteLine(e.Message); // 显示出错信息
                Console.WriteLine(e.StackTrace); // 显示出错位置
            }
            catch (DivideByZeroException e)
            { // 输入0
                Console.WriteLine("分母不能为0");
            }
            catch (FormatException e)
            {  // 格式异常
                Console.WriteLine("格式错误");
            }
            finally { // 无论是否发生异常,都会走进这里。
                Console.WriteLine("我是finally模块");
            }

(二):.NET中的异常类

这部分请百度搜索MSDN。

(三):异常类的属性

Console.WriteLine(e.Message); // 显示出错信息
Console.WriteLine(e.StackTrace); // 显示出错位置

等等……

(四):自定义异常

// 自定义异常
    class NegativeNumberExeption : ApplicationException
    {
        // 默认输出
        public NegativeNumberExeption() : base("自定义异常:非法操作"){}//对基类构造函数的赋值
        // 有参数输出
        public NegativeNumberExeption(string message) : base(message){}
      
    }

有好的建议,请在下方输入你的评论。

欢迎访问个人博客
https://guanchao.site

欢迎访问小程序:

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值