A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© ★栤膤嗹☆ 初级黑马   /  2013-8-20 13:20  /  1671 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

有了try catch 为什么还要是catch中去throw一个异常呢    throw和try catch是不是实现的功能可以全完转换呢

评分

参与人数 1技术分 +1 收起 理由
神之梦 + 1 很给力!

查看全部评分

3 个回复

倒序浏览
try与throw用于抛出异常,catch用于捕获异常。在throw语句中,只能使用对象,而不要使用指针(尤其不要new 一个),如果使用了指针,那么原来的临时错误对象,在代码执行到外层函数时就撤销了,那么catch语句会捕获不到异常。对于catch语句而言,它会复制括号中的对象,因此使用引用时,会得到原异常对象。如果抛出的异常不能在本函数处理掉,那么,它会被外部函数处理,如果最终异常没有被处理,程序报错。catch语句的书写按照从特殊到普通的原则,最下的catch捕捉最常见的错误

在设计方法时,如果在函数声明后使用throw(...),此函数承诺会引发任何对象,如果使用throw(),则说明不会引发异常,如果使用throw(runtime_error),则说明只会引发实时错误。为了能够捕捉构造函数初始化列化中的错误,应该使用catch测试块:
CTest::CTest(int a,string str) try :m_a(a),m_str(str)
{
}
catch(...)
{
}


构造函数会引发异常,而析构函数一般不会,如果在构造函数中new了一个对象之后,delete这个对象之前,发生了异常,则这个动态对象无法清除,然面临时对象在发生异常时却可以撤销,因此使用可以把指针定义成临时对象的成员,那么在构造函数产生异常时,对象会自动撤销,那么指针也被清除。
希望能帮到你。
回复 使用道具 举报
异常处理有两种方式:一:捕获并处理异常.在 try catch 中,try会捕捉try{}中的代码异常,并交给catch{}语句块处理异常,如果try中产生的异常与某个catch语句处理的异常类型相匹配,则执行catch语句块(可以有多个catch语句块) 二:将方法中可能产生的异常抛出,在方法中通过throws子句声明,谁调用这个方法谁就会接收到抛出的异常。带有throws子句的方法抛出的异常来源:一种是调用了可能抛出异常的方法,一种是方法体中生成并抛出的异常,方法体中的生成的异常是通过throw抛出的,throw可以用来抛出自定义的异常类,个人觉得和try catch还是有区别的,都是用来处理可能产生的异常,处理方式不一样,个人认为实现的功能不能完全转换
回复 使用道具 举报
本帖最后由 ★栤膤嗹☆ 于 2013-8-20 23:42 编辑
苏联兵 发表于 2013-8-20 16:14
try与throw用于抛出异常,catch用于捕获异常。在throw语句中,只能使用对象,而不要使用指针(尤其不要new  ...

很给力, 多谢。这个java中的指针指的是什么了

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马