异常的Rethrow分析

原创 2006年06月03日 20:53:00
网上看了一篇类似的分析,仔细看了一下写的不错,现在把代码引用一下:
try
       {
              try
              {

                     // 抛出一个异常对象

                     throw MyException("ex_obj1");

              }

              // 异常对象按值传递

              catch(MyException e)

              {
                     cout<<endl<<"捕获到一个MyException*类型的异常,名称为:"<<e.GetName()<<endl;
                     cout<<"下面重新抛出异常"<<endl<<endl;
                     // 异常对象重新被抛出
                     throw;
              }
       }

       // 异常对象再次按值传递

       catch(MyException e)

       {
              cout<<endl<<"捕获到一个MyException*类型的异常,名称为:"<<e.GetName()<<endl;
       }
这个地方异常作了四次构造,这四次构造分别称为obj1,obj2,obj3,obj4。逐一道来。

throw MyException("ex_obj1");看看这段代码。好像有一句话说,捕获的所有异常,永远不是异常对象本身。为什么这么说?MyException("ex_obj1")是构造了一个局部变量,但是这个局部变量被throw出去后会生成一个临时变量,我们所catch到的不是这个对象本身,而是这个临时对象。这个临时对象本身并没有什么,但却非常重要。因为rethrow是这个临时对象,而不是用值传递生成的新对象。所以用值传递的方式,不能将修改带到下一个catch块。后面两个catch就是obj3和obj4了,以后就不用想什么,对obj3和obj4所做的任何动作不会带到下一步,因为重新抛出的是obj2。

其实异常抛出很简单的,用引用传递就可以了。使用引用传递的好处就是每次catch都可以做点小动作。呵呵!

C++异常rethrow【转】

转自 http://se.csai.cn/ExpertEyes/200801031114531905.htm 在相遇篇中的《第5集 C++的异常rethrow》文章中,已经比较详细...
  • fall221
  • fall221
  • 2013年06月24日 22:01
  • 1814

Swift异常处理:throw和rethrow

Swift异常处理体现了函数式语言的特性,因此我们可以传一个会抛出异常的函数闭包(高阶函数)作为参数传到另一个函数中(父函数),父函数可以在子函数抛出异常时直接向上抛出异常,这时用rethrow关键字...
  • offbye
  • offbye
  • 2016年03月15日 19:00
  • 4096

异常中的throw和throws,还有处理格式

throws和throw的区别 1.throws使用在函数上, throw使用在函数内. 2.throws后面跟的异常类.可以跟多个.用逗号隔开. throw后面跟...
  • u011445690
  • u011445690
  • 2013年08月04日 23:26
  • 604

java log exception

关于异常,在排查问题的时候,日志对于我们显的格外重要,前几天发布的时候就遇到一个悲剧的现象,发布beta测试的时候,发现有个NullPointException,但是日志中只有日志的类全名称,但是没有...
  • iamzhongyong
  • iamzhongyong
  • 2013年07月11日 09:54
  • 1072

solrlin代码质量检查问题总结

这两天在用SonarLint检测代码的时候,SonarLint检测出了很多问题。这里,记录一下。 1.Either log or rethrow this exception 修改...
  • u013034640
  • u013034640
  • 2017年07月31日 20:10
  • 384

如何处理InterruptedException异常

InterruptedException简单描述InterruptedException异常是一个经常被误解的异常,通常情况下我们会忽视或则转化成RuntimeException并抛出:throw n...
  • kanbuqinghuanyizhang
  • kanbuqinghuanyizhang
  • 2016年09月26日 11:59
  • 423

用Python做单变量数据集的异常点分析

来自:http://my.oschina.net/taogang/blog/279402
  • fennvde007
  • fennvde007
  • 2014年07月07日 17:55
  • 1060

异常行为分析模型设计

本文针对异常访问现状及问题进行简要描述,在此基础上提出基于一元线性回归的最小二乘法异常访问分析模型,通过该模型解决了异常访问中时间与访问间相关性问题。 异常访问是指网络行为偏离正常范围的访问情况...
  • oanqoanq
  • oanqoanq
  • 2016年04月14日 13:46
  • 1545

Java异常以及处理原则

Java异常以及处理原则 原则 Java的基本理念是“结构不佳的代码不能运行”。 发现错误的理想时机是在编译阶段,也就是在你试图运行程序之前。然而,编译期并不能找出所有的错误,余下的问题必须...
  • yzmyyff
  • yzmyyff
  • 2015年09月05日 18:54
  • 3748

Android中的ANR异常如何分析又该怎么去避免ANR

ANR是个什么玩意        ANR,是“Application Not Responding”的缩写,即“应用程序无响应”。系统会向用户显示一个对话框,用户可以选择“等待”而让程序继续运行,也...
  • wangning13ji
  • wangning13ji
  • 2016年08月24日 11:48
  • 1594
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:异常的Rethrow分析
举报原因:
原因补充:

(最多只允许输入30个字)