远程call带try异常保护_C# 异常

0401866b470973d88af62899c425d024.png

前言

什么是异常?

1:异常时程序运行时的错误,违反了系统约束或者应用程序约束,或出现正在操作时未预料的情况

2:例如:程序尝试除以0或者试图写一个只读文件,程序就会抛出一个异常

3:如果系统没有处理这个异常,系统就会挂起

4: try 语句来指明为避免出现异常而被保护的代码段,并在发生异常时提供代码处理异常

5:try 有三个部分组成 try保护代码段 catch处理异常代码段 finally在所有情况下都要执行的代码,无论异常有没有发生

6: catch 句子有三种形式[一般类型,特定catch子句,带对象的]

7: finally 如果try内没有发生异常,那么在try块的结尾,控制流跳过catch直接执行finally,如果 try内部发生了异常,程序先执行catch再执行finally,即使try块中有return语句,或者在catch中抛出异常,finally也总是会执行

代码示例

异常的产生1:

        public static void CatchTest()        {            int x = 10, y = 0;            var z=x / y;            Console.WriteLine(z);        }        异常:          System.DivideByZeroException          HResult = 0x80020012          Message = 尝试除以零。

异常的产生2:

        public static string Test()        {            return null;        }        var res = Test();        res.Trim();        异常:        System.NullReferenceException:“未将对象引用设置到对象的实例。”

try ..catch ..finally

            try            {                被保护的代码段            }            catch (Exception ex)            {                异常处理程序                throw  ex;            }            finally            {                在所有情况下都要执行的代码,无论异常有没有发生            }

异常处理例子:

            int x = 10;            try            {                //被保护的代码段                int y = 0;                int z = x / y;            }            catch (Exception ex)            {                //异常处理程序                //throw  ex;                Console.WriteLine("程序产生了异常:" + ex.Message);            }            finally            {                Console.WriteLine("在所有情况下都要执行的代码" );                //在所有情况下都要执行的代码,无论异常有没有发生            }            输出:            程序产生了异常:尝试除以零。            在所有情况下都要执行的代码

带参数的catch句子

            int x = 10;            try            {                //被保护的代码段                int y = 0;                int z = x / y;            }            catch (Exception ex)            {                //异常处理程序                //throw  ex;                //Message: 获取描述当前异常的消息。                //StackTrace:获取调用堆栈上的即时框架字符串表示形式。                //Source: 获取或设置导致错误的应用程序或对象的名称。                Console.WriteLine("程序产生了异常:" + ex.Message);                Console.WriteLine("程序产生了异常:" + ex.StackTrace);                Console.WriteLine("程序产生了异常:" + ex.Source);            }            输出:            程序产生了异常:尝试除以零。            程序产生了异常:在 DDUP.Chtch_20.TryTest() 位置 H:\VisualStudio\DDUP\Chtch_20.cs:行号 33            程序产生了异常:DDUP            

finally始终会被执行

            try            {                int x = 10;                if (x < 20)                {                    return x;                }                else                {                    return 20;                }            }            catch (Exception e)            {                throw e;            }            finally            {                Console.WriteLine("this is finally");            }            输出:            this is finally

自定义异常:

        public static void V4()        {            try            {                int x = 10;                if (x < 20)                {                    throw new Exception("自定义异常!");                }            }            catch (Exception e)            {                Console.WriteLine(e.Message);                throw e;            }            finally            {                Console.WriteLine("this is finally");            }        }        输出:            自定义异常!            this is finally

写在最后

在程序中异常处理显得尤为重要,异常处理加上规范的日志记录,会对定位程序中的BUG有很大帮助,每个码农都应该养成良好异常处理习惯和日志记录的习惯;

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值