• 笔记08 throw e 和throw 的区别


    throw e对原异常进行拷贝,然后将新的异常对象抛出,这一步拷贝就有可能导致错误啦,拷贝出来的异常对象可能和原来的异常对象不是一个类型。
    比如原来的对象是个子类的异常对象,catch里声明的是父类异常类型,能够catch住子类异常对象,但是throw e是,调用父异常类型的拷贝,再抛出就变成父类异常对象了 
    其他一些异常处理的tip:
    catch时参数列表使用引用类型,一是省资源,二是保证对原异常对象修改。
    资源的分配和释放放在类的构造/析构函数里,可以避免异常退出时带来mem leakexception specification的使用。。
    Java异常处理:http://takeme.iteye.com/blog/1842644
     

    当我们抛出一个异常时, CLR会重新设置一个异常起始点。 CLR只记录最近一次异常抛出的位置。下面代码抛出一个异常,从而导致CLR重新设置该异常的起始点:

     void SomeMethod()

    {

        try

      {....}

        catch(Exception e)

        {

         ...

         throw e;   //CLR认为这里是异常的起始点

         }

    相反,如果我们抛出一个异常对象, CLR将不会重新设置其堆栈的起始点,下面代码抛出一个异常,但不会导致CLR重新设置异常的起始点: 

     void SomeMethod()

    {

        try

      {....}

        catch(Exception e)

        {

         ...

         throw;  //CLR不会重新设置异常的起始点

         }

  • 相关阅读:
    条件极值(1):隐函数极值问题
    从隐函数存在定理到隐函数定理
    吐槽教科书:不先行解释表达偏导数的符号
    8237dma的四种传送方式简介
    多线程中wait和notify的理解与使用
    ★三个和尚与机构臃肿的故事
    ★三个和尚与机构臃肿的故事
    常用的组播保留地址列表
    常用的组播保留地址列表
    谈谈IT界8大恐怖预言!
  • 原文地址:https://www.cnblogs.com/newcoder/p/4831558.html
Copyright © 2020-2023  润新知