zoukankan      html  css  js  c++  java
  • 新手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 

  • 相关阅读:
    linux sysfs (2)
    微软——助您启动云的力量网络虚拟盛会
    Windows Azure入门教学系列 全面更新啦!
    与Advanced Telemetry创始人兼 CTO, Tom Naylor的访谈
    Windows Azure AppFabric概述
    Windows Azure Extra Small Instances Public Beta版本发布
    DataMarket 一月内容更新
    和Steve, Wade 一起学习如何使用Windows Azure Startup Tasks
    现实世界的Windows Azure:与eCraft的 Nicklas Andersson(CTO),Peter Löfgren(项目经理)以及Jörgen Westerling(CCO)的访谈
    正确使用Windows Azure 中的VM Role
  • 原文地址:https://www.cnblogs.com/do-hardworking/p/9435786.html
Copyright © 2011-2022 走看看