• 抛出异常的区别 throw 和throw ex


      在面试的过程中提到了异常捕获的的几种用法,之前一直使用但是没有仔细留意,调试程序的过程中发现还是有区别的,主要区别在堆栈信息的起始点不同,下边我们通过实例来看这集中不同的抛出异常的方法。

      一般我们推荐throw来抛出异常,使用throw ex来抛出异常会清空存储的异常信息,认为已经处理过异常,只不过在抛出的过程中又产生的新的异常信息,从而找不到真正的错误源。

      第一种 使用的人数最多,但是不推荐使用,这样处理异常程序会清空堆栈中的异常信息,在堆栈中重置异常点。

    1             try
    2             {
    3             }
    4             catch (Exception ex)
    5             {              
    6                 throw ex;
    7             }        

      第二种 这种会追溯到异常的起源点,但是程序会报 定义的ex未被使用的警告

    1             try
    2             {
    3             }
    4             catch (Exception ex)
    5             {
    6                 throw;
    7             }

      第三种 这中方式和第二种相同 可以捕获所有的异常,IDE也不会警告

    1             try
    2             {
    3             }
    4             catch
    5             {
    6                 throw;
    7             }

      第四种 对异常重新包装,但同时保留了异常的起源点。  

    1         try
    2             {
    3             }
    4             catch (Exception ex)
    5             {
    6                 throw new Exception("经过进一步包装的异常", ex);
    7             }

      下边我们看具体使用过成中各种抛出异常的使用方法,对各种方法就会有了清晰的认识

      1 using System;
      2 
      3 namespace Throw
      4 {
      5 class Program
      6     {
      7         static void Main(string[] args)
      8         {
      9             ExceptionClass ec = new ExceptionClass();
     10 
     11             try
     12             {
     13                 ec.ExceptionThrow1();
     14             }
     15             catch (Exception ex)
     16             {
     17 
     18                 Console.WriteLine(ex.ToString());
     19             }
     20             Console.WriteLine("----------------------华丽的分割线---------------------------");
     21             try
     22             {
     23                 ec.ExceptionThrow2();
     24             }
     25             catch (Exception ex)
     26             {
     27 
     28                 Console.WriteLine(ex.ToString());
     29             }
     30             Console.WriteLine("----------------------华丽的分割线---------------------------");
     31             try
     32             {
     33                 ec.ExceptionThrow3();
     34             }
     35             catch (Exception ex)
     36             {
     37 
     38                 Console.WriteLine(ex.ToString());
     39             }
     40             Console.WriteLine("----------------------华丽的分割线---------------------------");
     41             try
     42             {
     43                 ec.ExceptionThrow4();
     44             }
     45             catch (Exception ex)
     46             {
     47 
     48                 Console.WriteLine(ex.ToString());
     49             }
     50             Console.WriteLine("----------------------华丽的分割线---------------------------");
     51 
     52             Console.ReadKey();
     53         }
     54     }
     55 
     56     /// <summary>
     57     /// 测试上下文抛出异常 相关上下文 栈的调用情况
     58     /// </summary>
     59     public class ExceptionClass
     60     {
     61 
     62         private void ExceptionMethod()
     63         {
     64             throw new DivideByZeroException();
     65         }
     66 
     67         /// <summary>
     68         /// 抛出异常的方法
     69         /// </summary>
     70         public void ExceptionThrow1()
     71         {
     72             try
     73             {
     74                 this.ExceptionMethod();
     75             }
     76             catch (Exception ex)
     77             {              
     78                 throw ex;
     79             }
     80         }
     81 
     82         public void ExceptionThrow2()
     83         {
     84             try
     85             {
     86                 this.ExceptionMethod();
     87             }
     88             catch (Exception ex)
     89             {
     90                 
     91                 throw;
     92             }
     93         }
     94 
     95         public void ExceptionThrow3()
     96         {
     97             try
     98             {
     99                 this.ExceptionMethod();
    100             }
    101             catch (Exception)
    102             {
    103 
    104                 throw;
    105             }
    106         }
    107 
    108         public void ExceptionThrow4()
    109         {
    110             try
    111             {
    112                 this.ExceptionMethod();
    113             }
    114             catch (Exception ex)
    115             {
    116 
    117                 throw new Exception("经过进一步包装的异常",ex);
    118             }
    119         }
    120     }
    121 }

    程序运行结果

  • 相关阅读:
    【Alpha阶段】第四次Scrum Meeting
    【Alpha阶段】第三次Scrum Meeting
    【Alpha阶段】第二次Scrum Meeting
    项目复审——Alpha阶段
    团队作业7-Alpha冲刺之事后诸葛亮
    团队作业6-展示博客
    Alpha阶段发布说明
    团队作业5-测试与发布
    冲刺博客-8
    冲刺博客-7
  • 原文地址:https://www.cnblogs.com/a164266729/p/4913898.html
Copyright © 2020-2023  润新知