参考了throw; vs. throw ex; Here's the difference!我才知道在catch块内的throw;和throw ex;是有区别的,以前都不知道可以直接写throw;呢。
这两者的主要不同在于输出的stack trace上:
- 如果你直接使用throw;,那么stack trace就和根本不存在这个catch块的时候一样,显示错误根源是真正抛出异常的地方。
- 如果你使用throw ex;,那么stack trace就认为你catch到的异常已经被处理了,只不过处理过程中又抛出新的异常,这时候stack trace就把throw ex;当作错误根源了。
显然,后者会让stack trace的信息量少了,增加了追踪错误来源的难度,所以最好不要这样做。如果你要进行catch,然后你又要让异常继续冒泡,除了throw ex;以外你还有另外一个选择:
try
{
MethodThatThrowsException();
}
catch (Exception ex)
{
throw new Exception("oops!", ex);
}
这时候,你就将原本的异常封装进了新抛出的异常中,而stack trace会自动认为内部异常是导致当前异常的原因,也就会把内部异常的stack trace也递归显示出来。
From: http://www.cnblogs.com/cathsfz/archive/2006/11/12/558298.html
分享到:
相关推荐
C++语言处理异常 try catch throw,带程序例子
一个非常简单的try-throw-catch源码
2.异常抛出后会一直返回调用函数(或者说上一层函数),直到被catch到,所以便可以统一将catch语句写在一起,使代码更加方便整洁。 1.遇到除0时的异常 void test1() { try { double m, n; cin >> m >> n; if...
C++中处理异常时,可以使用try-catch块来捕获和处理异常。try块包含有可能抛出异常的代码,而catch块用于捕获特定类型的异常并处理它们。 在 processNumber() 函数中,我们模拟了一些可能抛出异常的情况。如果传入...
如果要想使一个catch block能抓获多种数据类型的异常对象的话,怎么办?C++标准中定义了一种特殊的catch用法,那就是” catch(…)”。 感性认识 1、catch(…)到底是一个什么样的东东,先来个感性认识吧!看例子先: ...
若要在 C++ 中实现异常处理,你可以使用 try、throw 和 catch 表达式。 首先,使用 try 块将可能引发异常的一个或多个语句封闭起来。 throw 表达式发出信号,异常条件(通常是错误)已在 try 块中发生。你可以使用...
try 语句测试代码块的错误。 catch 语句处理错误。 ...try 语句允许我们定义在执行时进行错误测试的代码块。 catch 语句允许我们定义当 try 代码块发生错误时,所执行的代码块。 JavaScript 语句 t
WEB开发 之 JavaScript 错误 - Throw、Try 和 Catch.docx
throw异常:C#语言throw异常处理语句, throw语句用于发出在执行期间出现反常情况(异常)信号throw语句通常和try-catch或try-finally语句起使用可以使用throw语句显式引发异常(这里引发自定义异常)创建用户自定义异常...
异常处理的基本思想是简化程序的错误代码,为程序键壮性提供一个标准检测机制。 本文为你解释怎样处理C++的异常处理。提供了大量的code
JavaScript 错误 – throw、try 和 catch try 语句测试代码块的错误。 catch 语句处理错误。 throw 语句创建自定义错误。 finally 语句在 try 和 catch 语句之后,无论是否有触发异常,该语句都会执行。 ...
今天在开发过程中调用一个库函数结果库函数有throw操作,当前代码没有对throw进行捕获操作,导致进程在main 函数中捕获到异常导致进程crash。所以借此记录下c++关于try,throw,catch的用法。 程序运行时常会碰到一些...
在到达 catch 语句时,throw 语句和 catch 语句之间的范围内的所有自动变量将在名为“堆栈展开”的过程中被销毁。在堆栈展开中,执行将继续,如下所示: 控制通过正常顺序执行到达 try 语句。执行 try 块内的受保护...
Java中的throw与throws的关键字的使用
Java的throw和return
重载重写、接口、抽象类、String指针和字符串拼接、异常catch、throw、throws、字符流和字节流
异常中throw与throws的使用区别
1.需要完成的任务 使用UserDaoImp1类和User...(2)为了判断在finally块输出是否抛出异常,可以设置一个变量,在catch块里修改这个变量 实践四:使用log4j 需求说明 (1)使用log4j输出日志信息 (2)查看输出日志信息
在AND_CATCH块中调用THROW_LAST宏以便把处理过程移到下个外部异常框架。AND_CATCH可标记CATCH或AND_CATCH块的末尾。 注释: AND_CATCH块被定义成为一个C++作用域(由花括号来描述)。若用户在此作用域定义变量,...