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

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

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

             try
{
}
catch (Exception ex)
{
throw ex;
}

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

             try
{
}
catch (Exception ex)
{
throw;
}

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

             try
{
}
catch
{
throw;
}

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

         try
{
}
catch (Exception ex)
{
throw new Exception("经过进一步包装的异常", ex);
}

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

 using System;

 namespace Throw
{
class Program
{
static void Main(string[] args)
{
ExceptionClass ec = new ExceptionClass(); try
{
ec.ExceptionThrow1();
}
catch (Exception ex)
{ Console.WriteLine(ex.ToString());
}
Console.WriteLine("----------------------华丽的分割线---------------------------");
try
{
ec.ExceptionThrow2();
}
catch (Exception ex)
{ Console.WriteLine(ex.ToString());
}
Console.WriteLine("----------------------华丽的分割线---------------------------");
try
{
ec.ExceptionThrow3();
}
catch (Exception ex)
{ Console.WriteLine(ex.ToString());
}
Console.WriteLine("----------------------华丽的分割线---------------------------");
try
{
ec.ExceptionThrow4();
}
catch (Exception ex)
{ Console.WriteLine(ex.ToString());
}
Console.WriteLine("----------------------华丽的分割线---------------------------"); Console.ReadKey();
}
} /// <summary>
/// 测试上下文抛出异常 相关上下文 栈的调用情况
/// </summary>
public class ExceptionClass
{ private void ExceptionMethod()
{
throw new DivideByZeroException();
} /// <summary>
/// 抛出异常的方法
/// </summary>
public void ExceptionThrow1()
{
try
{
this.ExceptionMethod();
}
catch (Exception ex)
{
throw ex;
}
} public void ExceptionThrow2()
{
try
{
this.ExceptionMethod();
}
catch (Exception ex)
{ throw;
}
} public void ExceptionThrow3()
{
try
{
this.ExceptionMethod();
}
catch (Exception)
{ throw;
}
} public void ExceptionThrow4()
{
try
{
this.ExceptionMethod();
}
catch (Exception ex)
{ throw new Exception("经过进一步包装的异常",ex);
}
}
}
}

程序运行结果

抛出异常的区别 throw 和throw ex的更多相关文章

  1. C#中使用throw和throw ex抛出异常的区别

    通常,我们使用try/catch/finally语句块来捕获异常,就像在这里说的.在抛出异常的时候,使用throw和throw ex有什么区别呢? 假设,按如下的方式调用几个方法: →在Main方法中 ...

  2. (转) C#中使用throw和throw ex抛出异常的区别

    通常,我们使用try/catch/finally语句块来捕获异常,就像在这里说的.在抛出异常的时候,使用throw和throw ex有什么区别呢? 假设,按如下的方式调用几个方法: →在Main方法中 ...

  3. throw和throw ex的区别

    之前,在使用异常捕获语句try...catch...throw语句时,一直没太留意几种用法的区别,前几天调试程序时无意中了解到几种使用方法是有区别的,网上一查,还真是,主要是区别在堆栈信息的起始点不同 ...

  4. 【转】C# 异常处理 throw和throw ex的区别 try catch finally的执行顺序(return)

    [转]throw和throw ex的区别 之前,在使用异常捕获语句try...catch...throw语句时,一直没太留意几种用法的区别,前几天调试程序时无意中了解到几种使用方法是有区别的,网上一查 ...

  5. C#使用throw和throw ex的区别(转)

    使用throw和throw ex的区别 之前,在使用异常捕获语句try...catch...throw语句时,一直没太留意几种用法的区别,前几天调试程序时无意中了解到几种使用方法是有区别的,网上一查, ...

  6. c# throw和throw ex

    c# throw和throw ex 我们在日常开发当中,经常会用到exception异常,并且我们会在exception中的catch块中throw exception,例如: static void ...

  7. throw与throw的区别

    Throwable 是所有 Java 程序中错误处理的父类 ,有两种资类: Error 和 Exception . Error :表示由 JVM 所侦测到的无法预期的错误,由于这是属于 JVM 层次的 ...

  8. throw与throws的区别

    throws语句       throws总是出现在一个函数头中,用来标明该成员函数可能抛出的各种异常.对大多数Exception子类来说,Java   编译器会强迫你声明在一个成员函数中抛出的异常的 ...

  9. try-catch和throw,throws的区别和联系

    转载:http://blog.sina.com.cn/s/blog_62148d1e0100hkqc.html 区别一:throw 是语句抛出一个异常:throws 是方法抛出一个异常: throw语 ...

随机推荐

  1. Hbase设计实战

    Hbase设计实战 本文通过一个游戏公司客户实际案例的讲解,分析了 Hbase 表设计及开发在实际案例中的运用,对比了不同的 Hbase 设计考量对客户端访问模式及检索性能的差异.读者通过案例中 Hb ...

  2. linux 声音大小调整的命令

    alsamixer 输入上面的命令 回车即可看到图形界面,界面如下 ┌──────────────────────────── AlsaMixer v1.0.27.1 ──────────────── ...

  3. 使程序能够引入.json文件, 为网站添加 MIME 映射

    确认启用了 MIME 映射,或使用命令行工具 appcmd.exe 为网站添加 MIME 映射. 若要设置 MIME 类型,请在 IIS Express 安装目录中运行以下命令: appcmd set ...

  4. 在winform程序中实现按照不同的角色或用户展现不同的页面

    SqlConnection cn = new SqlConnection();             cn.ConnectionString = "Data Source=192.168. ...

  5. android系统360浏览器使用append动态添加元素出现黑色错乱背景

    去掉样式 backface-visibility:hidden;

  6. 利用eclipse开发php<转>

    1.安装php环境 Eclipse支持PHP自动提示 其实如果你已经安装好了php环境(安装过程见)的话,只需要下面2步就可以了.hoho,很简单的. 1,下载eclipse中php的插件phpecl ...

  7. 如何分析apache日志[access_log(访问日志)和error_log(错误日志)]

    如何分析apache日志[access_log(访问日志)和error_log(错误日志)] 发布时间: 2013-12-17 浏览次数:205 分类: 服务器 默认Apache运行会access_l ...

  8. hdu4976 贪心+dp

    A simple greedy problem. Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java ...

  9. Linux 挂载iso,并设置为源

    ubuntu在安装lsb-core时需要从 /media/cdrom中查找源,无奈我机器的光驱被我换为硬盘了,无法安装光盘,只有在网上下载的iso文件在硬盘中,所以把iso挂载到它要查找位置 执行: ...

  10. css background-position:x% y%

    规则1: background-position:xpx ypx; 为正值时:背景图片的左上顶点朝右下移动直至距离div的左上顶点为xpx ypx: 规则2: background-position: ...