• 看视频学编程之管理错误和异常


    ------- Windows Phone 7手机开发.Net培训、期待与您交流! -------

      

    错误可能在程序运行的任何阶段发生,早起系统(如 Unix)采用的典型方案要求在每一次函数出错的时候,都由操作系统设置
    一个全局变量,每次调用函数之后,都检查全局变量,判断方法是否成功。
    和目前大多数面向对象编程语言一样,C#没有使用这种痛苦的方式来处理错误,在C#中使用异常和异常处理程序,以实现程序主逻辑
    与错误处理代码区分开。
    在C#中写一个支持异常处理的应用程序,需要做下面两件事:
    1、代码要放在一个try{}中,代码运行时,它会尝试执行try块内的所有语句,如果没有任何语句产生一个异常,
    这些语句将一个接一个的运行,知道全部完成;一旦出现异常,就会跳出try{},并进入一个catch{}处理程序中执行。
    2、在try{}后面紧接着写一个或多个catch{},用catch{}处理任何发生的错误。
       每个catch{}都负责捕捉并处理一种特定类型的异常。try{}中任何一句语句造成错误,运行时都会抛出一个异常,然后将检查try{}
         后面的catch{},将控制权移交给一个匹配的catch{}。
     
    下面是一个例子,我在一个try{}中尝试讲用户在控制台输入的内容转换成整数值,为了将字符串转换成整数,要求字符串中包含一组
    有效的数位,而不能是一组随意的字符。如果字符串包含无效的字符,Convert.ToInt32()会抛出一个异常,由后面的catch{}捕捉异常
    并进行处理。catch处理完之后,程序从catch{}后的第一个语句继续执行。
                    try
                    {
                        int number = Convert.ToInt32(Console.ReadLine());
                        if (number < min || number > max)
                        {
                            Console.WriteLine("只能输入{0}-{1}之间的数字,请重新输入!", min, max);
                            continue;
                        }
                        return number;
                    }
                    catch
                    {
                        Console.WriteLine("只能输入数字,请重新输入!");
                    }
          ……
     如果try{}是某个函数的一部分,try{}中抛出的异常后面没有合适的catch{}捕捉到,那么这个函数将立即退出,并返回它的调用方法,
    如果它的调用方法使用了一个try块,运行时会尝试定位try{}之后的一个匹配的catch{}并执行它;如果没有使用try{}或没有定位到
    合适的catch{},那个调用函数也将退出,返回它的上一级调用函数,以此类推。
     
    checked语句
     
    checked语句是以checked关键字开头的一个代码块。checked语句中的任何整数运算溢出,都会抛出一个OverFlowException异常:
    int num = int.MaxValue;
    checked
    {
      int a=num++;
      Console.WriteLine("执行不到这里!!");  
    }
     还可以使用unchecked来创建一个强制不检查溢出的语句块。一个unchecked块中所有整数运算都不会检查,永不抛出异常!!
    int num = int.MaxValue;
    unchecked
    {
      int b=num++;
      Console.WriteLine("能执行到这里!!");  
    }
     checked表达式:
    使用 checked和unchecked关键字还可以对单独的整数表达式进行溢出检查。
    int a = checked(int.MaxValue + 1);
    int b= unchecked(int.MaxValue + 1);
     
    抛出异常(throw)
     
     switch(month)
    {
      case1:
        return "一月 " ;
      case2:
        return "二月 " ;
      ……
      case12:
        return "十二月 " ;
      default:
        throw new ArgumentOutOfRangeException("不存在的月份");
    }      
    throw抛出一个异常对象。后面可以跟catch{}捕捉异常,并对异常进行处理!
     
    finally{}块
     
    当一个异常抛出是会改变程序的执行流程。这意味着不能保证当一个语句结束后,它之后的语句肯定会执行。
    有时候一个特定的语句不运行不会造成问题,但大多数时候,它都会造成大问题,加入一个语句的作用是释放它之前
    一个语句获得的资源,不如不执行该语句会造成资源得不到释放。
    为了确保一个语句总是运行,可以把语句放入finally{}中;finally{}要么紧挨在try{}后,要么紧接在try{}之后最后一个
    catch{}之后,只要程序进入与一个finally{}关联的try{},finally{}就一定会被执行;即使抛出了一个异常,异常被捕捉到
    运行catch{}之后将执行finally{};如果异常没有被捕捉,那么finally{}也将运行!!
     
      
     
     
     
  • 相关阅读:
    Linux服务器程序规范化
    Linux I/O函数
    IP协议详解
    Linux C++ 连接 MySQL
    I/O复用
    Linux网络编程基础API
    TCP协议详解
    React源码解携(二): 走一趟render流程
    记账项目 webpack优化
    前端监控系统博客总结
  • 原文地址:https://www.cnblogs.com/cctt/p/3141949.html
Copyright © 2020-2023  润新知