设为首页 收藏本站
查看: 523|回复: 0

[经验分享] try catch throw php搜集

[复制链接]

尚未签到

发表于 2017-3-30 10:13:04 | 显示全部楼层 |阅读模式
  我个人的理解是: 
1。在private或者protected的成员函数不使用try,catch,而只使用throw 
2。如果在private或者protected的成员函数需要使用try,catch,那么就要使用rethrow 
3。在public成员函数里使用try,catch 
4。如果该类相对于整个项目来说是属于被调用层,那么public成员函数也可以不使用try,catch 
5。如果调用第三方的代码,我一般都会用try,catch 
class CTest1; 
class CTest2; 
class CTest3; 

void BadCode() 

  //define 
  CTest1 * pTest1 = NULL; 
  CTest2 * pTest2 = NULL; 
  CTest3 * pTest3 = NULL; 

  //使用try, catch, throw 
  try 
  { 
    //new test1 
    pTest1 = new CTest1; 

    //do something 
    bool bRet = DoSomething(); 
    if (!bRet) 
      throw -1; 

    //new CTest2 
    pTest2 = new CTest2; 

    //do something 
    bRet = DoSomething(); 
    if (!bRet) 
      throw -2; 

    //new CTest3 
    pTest3 = new CTest3; 

    bRet = DoSomething(); 
    //do something 
    if (!bRet) 
      throw -3; 

    //release 
    delete pTest1; 
    pTest1 = NULL; 
    delete pTest2; 
    pTest2 = NULL; 
    delete pTest3; 
    pTest3 = NULL; 
  } 
  catch(...) 
  { 
    if (pTest1) 
      delete pTest1; 
    if (pTest2) 
      delete pTest2; 
    if (pTest3) 
      delete pTest3; 
  } 
}

//-----------------------------------------------------------------------------------------------------------------------------------------------



try
{
..........
.........
//throw
}
catch (int x)
{
.......
}




(1)如果在try中没有throw抛出异常 是不是catch 就捕获不到异常啦? throw不可能莫名其妙抛出异常吧 总要判断下吧!
比如if(..)的 这样的话 要这些try catch干什么?多此一举? 直接if语句后面写就的啦!
(2)如果try中没有throw, 哪么catch 会捕获到异常吗?怎么捕获的?这一点很不明白! 如果try中发生异常 哪么到底谁通知catch呢?
(3) throw到底能干什么?
. 如果try里面调用了某个库函数,那个函数throw了异常,就会在这里被catch。这种情况自己就没法判断
throw产生一个异常,这个异常会顺着函数调用的级别逐级向上,由最接近的一个catch来处理。如果一直没有catch,最后就被操作系统捕捉到
1.首先,有的异常的是否抛出不是程序员能控制的,比如内存耗尽,所以需要try...catch,另外,有的时候需要通过抛出异常在程序的其他地方进行 处理,因为当前上下文缺少处理该异常的信息,所以程序员可以自定义异常,并在某种情况下抛出该异常,外层代码需要try...catch来捕获该异常
2.try块里的代码可能没有显示抛出异常,但里面调用的函数有可能抛出异常;怎么捕获的就涉及到异常处理系统的实现,具体的还是由牛人们来解答吧
3.throw就是抛出指定的异常,该异常可以在程序的其他地方被捕获并处理,当然也可能始终没有被捕获,此时,程序一般立刻终止,退出
试想,你写的一个方法method()给别人调用,你知道那个方法执行可能会出错,当出错的时候,你需要把错误信息返回给调用者。这时候,你就只能用throw抛出错误。调用者把对method()的调用放在try块里,就能catch到你抛出的错误,从而获得错误信息。
(1)
   
try的代码段假如没有抛出异常(可能是调用的函数抛出异常),catch确实捕获不到异常;用try catch而不用if能够很快的跳出深层嵌套啊。能够让代码更清晰。


(2)

1里提到了可以捕获深层异常,假如调用的函数中抛出了异常,c++会沿调用链向上回溯(不是通过return回溯),找到第一个try块,
然 后找到对应的catch,假如该异常能被catch处理(类型匹配,其中...处理所有异常),则catch块处理该异常,然后按正常程序继续走下去,回 到正常的函数调用返回链。假如一直找不到一个try,catch块,就会调用C++的“未处理异常捕获器”,这个函数指针是可以设置的,他的默认行为是终 止程序。

(3) throw的用处是抛出异常,正常的返回用return,而异常用throw。这样程序可以集中处理返回值(这里的返回值不同于C,每个返回值都是正确的,只是含义不同,而C的返回值可能代表着错误),而错误集中在catch块处理,代码逻辑会更清晰明了

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-357470-1-1.html 上篇帖子: php 保存SESSION 对象 下篇帖子: php获取某个目录大小
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表