zoukankan      html  css  js  c++  java
  • 深层次详解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 下的引发的异常
     
    附:异常层次图
  • 相关阅读:
    wget下载https文件,服务器可以虚拟机中不行的问题
    FTP被动模式服务器端开有限的端口
    ZOJ
    HDU
    JAVA 大数 A+B问题
    A Simple Math Problem(矩阵快速幂)----------------------蓝桥备战系列
    Covering(矩阵快速幂)
    卡特兰数详讲(转)
    Just a Hook(线段树区间修改值)-------------蓝桥备战系列
    A Simple Problem with Integers(线段树区间更新复习,lazy数组的应用)-------------------蓝桥备战系列
  • 原文地址:https://www.cnblogs.com/xtt321/p/3226702.html
Copyright © 2011-2022 走看看