• 深层次详解Exception


    所有的异常类都继承自System.Exception类,当异常产生时,CLR将创建该异常类的实例对象,将从最底层依次寻找合适的异常类型,同时若存在catch语句时将会选择最合适的语句进行处理。

    catch语句包括三种形式:

     若使用第三种类型,可以得到异常实例 InstanceID的相关属性,如Message、Source等。

    多catch的处理原则

    一个异常发生时,会跳转到与异常异常最匹配的catch块执行,继承链决定了匹配度。

    public static void HandleExecptionMethod()
            {
                try
                {
                    throw new ApplicationException("ApplicationException Occur!");
                }
                catch (NullReferenceException)//尝试取消引用空对象时引发
                {
                    Console.WriteLine("Handle1");
                }
                catch (ArgumentException)//当向方法提供的参数之一无效时引发
                {
                    Console.WriteLine("Handle2");
                }
                catch (ApplicationException)//当程序发生非致命性应用程序错误时引发的异常
                {
                    Console.WriteLine("Handle3");
                }
                catch (SystemException)
                {
                    Console.WriteLine("Handle4");//与system命令空间中预定义异常定义基类
                }
                catch (Exception)//应用程序执行过程中发生错误
                {
                    Console.WriteLine("Handle5");
                }
                Console.ReadKey();
            }

    在上例中共有5个catch块,注意catch块必须按照从最具体到最常规的顺序排列,否则可能造成编译错误。例若将Handle5的向上移到Handle4前面,则发生编译错误。

     public static void ThrowDemoMethod()
            {
                FileStream fs = null;
                try
                {
                    fs = new FileStream("c:\dd.txt",FileMode.Open);
                    StreamReader strder = new StreamReader(fs,System.Text.Encoding.Default,false);
                    string st = strder.ReadLine();
                    Console.WriteLine(st);
                }
                catch (Exception e)
                {
                    Console.WriteLine(e.GetType());//获取异常类型
                    //throw new FileNotFoundException("data.txt is not existed");  //重新获取异常
                }
                finally
                {
                    fs.Close();
                }
            }
     FileStream 下的引发的异常
     
    附:异常层次图
  • 相关阅读:
    洛谷 P1763 状态压缩dp+容斥原理
    hdu4612 Warm up 缩点+树的直径
    UVA-315 无向图求割点个数
    mysql 严格模式 Strict Mode说明
    bak文件恢复成 SQL2005 数据库 的全程讲解
    vps(windows2003)安全设置参考
    window下lamp环境搭建
    centos虚拟机配置网卡连接
    linux Tar 命令参数详解
    linux 打包和压缩的概念和区别
  • 原文地址:https://www.cnblogs.com/xtt321/p/3226702.html
Copyright © 2020-2023  润新知