• 新手C#异常的学习2018.08.07


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

        class Program
        {
            static void Main(string[] args)
            {
                System.IO.File.Delete(@"F:output.txt");
                System.IO.File.Delete(@"F:面向对象2.exe");
                System.IO.File.Delete(@"F:input.txt");
                Console.ReadKey();
            }
        }

      上述代码中,若面向对象2.exe文件被打开,程序执行时会抛异常,我们会发现output.exe已经被删除,但是input.exe并未被删除,可见异常产生时,异常代码前面的代码会被执行,后面的不会被执行,为了处理异常产生,采用try,catch关键词。

        class Program
        {
            static void Main(string[] args)
            {
                System.IO.File.Delete(@"F:output.txt");
                /*如果try中的代码执行发生异常,直接执行catch中的代码会被执行,catch之后的代码会继续往下执行
                 * 如果不加try-catch,代码执行抛出异常后,后面的代码不会继续执行
                 */ 
                try
                {
                    System.IO.File.Delete(@"F:面向对象2.exe");
                }
                catch
                {
                    Console.WriteLine("删除失败");
                }
                System.IO.File.Delete(@"F:input.txt");
                Console.ReadKey();
            }
        }

      运行面向对象2.exe文件,当代码被编译时,输出结果为“删除失败”,但是output.txt和input.txt文件均成功被删除,面向对象2.exe文件未被删除。可见当执行try失败后,直接运行catch及catch后续的代码。

      但是在上述代码执行时,我们并不知道异常的原因,采用下列代码可以弹出异常原因

                try
                {
                    System.IO.File.Delete(@"F:面向对象2.exe");
                }
                catch(Exception error)
                {
                    Console.WriteLine("删除失败,错误为{0}",error.Message);//可以显示异常原因
                }

      在catch()中加入Exception xx,可以在运行结果中弹出抛异常的原因,结果截图如下

      不要随意地使用try catch,异常是一种“未考虑的情况”,尽量不要靠try catch来实现正常的逻辑,程序员应该要自身完善程序的逻辑性,避免出现异常。可以抓取某一类异常,例如

                catch(FileNotFoundException ex)
                {
                    Console.WriteLine("读取文件不存在,错误为{0}",ex.Message);
                }

      try finally,无论try中的语句有无成功执行,finally中的语句在最后都会被执行,可以用try catch... finally。

    2018.08.07 

  • 相关阅读:
    Python笔记:日期时间获取与转换
    算法笔记:递归、动态规划
    容器技术介绍:Docker Dockerfile语法与指令
    Netdiscover网络扫描工具
    持续集成:jenkins + pytest + selenium + Git + Allure自动化测试
    MySQL数据库基础入门
    Parameters 至少一个参数没有指定
    C/C++ 延时函数 (标准库)
    TabController控件测试
    contentEditable
  • 原文地址:https://www.cnblogs.com/do-hardworking/p/9435786.html
Copyright © 2020-2023  润新知