抛出异常的区别 throw 和throw ex
在面试的过程中提到了异常捕获的的几种用法,之前一直使用但是没有仔细留意,调试程序的过程中发现还是有区别的,主要区别在堆栈信息的起始点不同,下边我们通过实例来看这集中不同的抛出异常的方法。
一般我们推荐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);
}
}
}
}
程序运行结果
`WX[0AUYM.png)

抛出异常的区别 throw 和throw ex的更多相关文章
- C#中使用throw和throw ex抛出异常的区别
通常,我们使用try/catch/finally语句块来捕获异常,就像在这里说的.在抛出异常的时候,使用throw和throw ex有什么区别呢? 假设,按如下的方式调用几个方法: →在Main方法中 ...
- (转) C#中使用throw和throw ex抛出异常的区别
通常,我们使用try/catch/finally语句块来捕获异常,就像在这里说的.在抛出异常的时候,使用throw和throw ex有什么区别呢? 假设,按如下的方式调用几个方法: →在Main方法中 ...
- throw和throw ex的区别
之前,在使用异常捕获语句try...catch...throw语句时,一直没太留意几种用法的区别,前几天调试程序时无意中了解到几种使用方法是有区别的,网上一查,还真是,主要是区别在堆栈信息的起始点不同 ...
- 【转】C# 异常处理 throw和throw ex的区别 try catch finally的执行顺序(return)
[转]throw和throw ex的区别 之前,在使用异常捕获语句try...catch...throw语句时,一直没太留意几种用法的区别,前几天调试程序时无意中了解到几种使用方法是有区别的,网上一查 ...
- C#使用throw和throw ex的区别(转)
使用throw和throw ex的区别 之前,在使用异常捕获语句try...catch...throw语句时,一直没太留意几种用法的区别,前几天调试程序时无意中了解到几种使用方法是有区别的,网上一查, ...
- c# throw和throw ex
c# throw和throw ex 我们在日常开发当中,经常会用到exception异常,并且我们会在exception中的catch块中throw exception,例如: static void ...
- throw与throw的区别
Throwable 是所有 Java 程序中错误处理的父类 ,有两种资类: Error 和 Exception . Error :表示由 JVM 所侦测到的无法预期的错误,由于这是属于 JVM 层次的 ...
- throw与throws的区别
throws语句 throws总是出现在一个函数头中,用来标明该成员函数可能抛出的各种异常.对大多数Exception子类来说,Java 编译器会强迫你声明在一个成员函数中抛出的异常的 ...
- try-catch和throw,throws的区别和联系
转载:http://blog.sina.com.cn/s/blog_62148d1e0100hkqc.html 区别一:throw 是语句抛出一个异常:throws 是方法抛出一个异常: throw语 ...
随机推荐
- motan源码分析一:服务发布及注册
motan是新浪微博开源的服务治理框架,具体介绍请看:http://tech.sina.com.cn/i/2016-05-10/doc-ifxryhhh1869879.shtml. 本系列的文章将分析 ...
- AIX Study之--AIX网卡配置管理(ent0、en0、et0)
AIX Study之--AIX网卡配置管理(ent0.en0.et0) 1.查看AIX系统网卡信息: [root@aix211 /]#lsdev |grep et en0 Available 1L- ...
- OC可变參数的函数实现va_start、va_end、va_list的使用
一.简单介绍 我们常常在编程的时候看见类似这种代码,如图1.1 图1.1 或者是这种可变參数,如图1.2 图1.2 二.基本知识介绍 在学习怎样写这样的格式的函数前,先简介几个经常使用的宏: 下面摘自 ...
- Bottle 中文文档
译者: smallfish (smallfish.xy@gmail.com) 更新日期: 2009-09-25 原文地址: http://bottle.paws.de/page/docs (已失效) ...
- Zend Studio 10正式版破解(2013-02-26更新)
Zend Studio 10正式版注册破解(2013-02-26完成更新) 1.以下方法仅供技术交流学习,请勿非法使用,如长期使用请支持购买正版. 2.若你还没有最新安装程序? ZendStudio ...
- php parse_url 函数使用方法解析
此函数返回一个关联数组,包含现有 URL 的各种组成部分.如果缺少了其中的某一个,则不会为这个组成部分创建数组项.组成部分为: scheme – 如 http host port pass path ...
- codevs 1027 姓名与ID
/* 二分图匹配 建图稍麻烦点 不过 有STL大法带我上天 说正经的 先假设都有关系 然后把确定的没有关系的删掉 这样跑出来的一定是完美匹配 至于确定的匹配嘛 删掉这一条 不再是完美匹配 然后记下排序 ...
- Examples_08_07
http://yarin.iteye.com/?page=4 Activity01.java package com.yarin.android.Examples_08_07; import andr ...
- Jquery.Sorttable 桌面拖拽自定义
<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8&quo ...
- IP V4地址分类
IP V4地址 共分为五类: A类地址范围:1.0.0.1---126.255.255.254 B类地址范围:128.0.0.1---191.255.255.254 C类地址范围:192.0.0.1- ...