参考了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
分享到:
相关推荐
每一个`catch`块都指定了一个特定类型的异常,只有当`try`块内抛出的异常与`catch`块指定的类型相匹配时,这个`catch`块才会被执行。一个`try`块后面可以跟多个`catch`块,分别处理不同类型的异常。这样可以实现更为...
Try语句允许我们定义在执行时进行错误测试的代码块。如果在Try代码块中发生错误,JavaScript引擎将停止执行,并生成一个错误消息。Catch语句允许我们定义当Try代码块发生错误时,所执行的代码块。Try和Catch语句是成...
此外,Java还支持多 catch 语句,允许在一个`catch`块中捕获多种类型的异常,提高代码的可读性和简洁性: ```java try { // ... } catch (IOException | SQLException e) { // 共享的异常处理逻辑 } ``` 总的来...
自定义异常通常会继承自这个基类或其派生类,以便在`catch`块中可以使用更通用的类型来捕获多种异常。 5. **异常匹配规则**:C++的异常处理遵循最佳匹配原则,即会尝试找到与抛出异常类型最匹配的`catch`块。如果...
或者,可以使用单个 `catch` 块处理多种类型的异常,只要它们是同一个基类或接口。 ```java try { // ... } catch (IOException | SQLException e) { // 处理两种不同类型的异常 } ``` 4. **finally 块**:...
如果在try块内发生异常,程序会立即跳出当前执行路径,转而寻找合适的catch块来处理异常。 1. **异常类型**:C#中有多种内置的异常类型,如`System.ArgumentException`、`System.IO.IOException`等。开发者也可以...
在 C++ 中,try catch 机制由三个部分组成:try 块、catch 块和 throw 语句。try 块是用于包围可能抛出异常的代码的代码块;catch 块是用于捕捉和处理异常的代码块;throw 语句是用于抛出异常的语句。 try 块 try ...
子类异常可以被父类异常捕获,这意味着一个catch块可以捕获多种类型的异常。例如,`IOException`是`Exception`的子类,所以catch(Exception e)也能捕获`IOException`。 此外,Java还提供了一些内置的异常类,如`...
多重catch块允许在单个catch中捕获多种类型的异常,提高代码的简洁性。 5. 自定义异常 开发者可以通过创建新的异常类来扩展`Exception`或其子类,以表示特定的业务逻辑错误。自定义异常类通常带有详细的错误信息和...
在这种情况下,异常对象被创建并传递给catch块进行处理。 3. **异常类型匹配** 当catch块捕获异常时,它会检查异常对象的类型是否与catch块指定的异常类型匹配。如果匹配,catch块内的代码将会执行。如果try块抛出...
Java的异常处理机制通过将异常处理代码和业务代码分离,使得程序结构更加清晰,异常处理代码可以集中在特定的catch块中,从而提高代码的可读性和可维护性。 在try-catch结构中,如果try块中的代码没有异常发生,则...
然而,如果变量在`try-catch-finally`块之外声明,它们在整个代码块内都是可见的。 6. **检查异常的处理**:Java中的检查异常(checked exception)是那些在编译时必须处理的异常,例如`IOException`。如果你的代码...
6. **多 Catch 块**:Java 7引入了多`catch`块,允许在一个`catch`中捕获多种类型的异常,通过使用管道符`|`分隔不同的异常类型。 7. **finally 块的特殊情况**:在某些情况下,如`System.exit()`或线程被中断,`...
理解异常的概念,运用 try 块、catch 块和 finally 块处理异常,运用多重 catch 块处理异常,运用嵌套 try/catch 块处理异常,运用关键字 throw 和 throws 处理异常。 3. 程序中的异常 在 Java 中,异常可以是编译...
可以有更多的catch块 ``` 在这个结构中,`try`块内的代码如果引发异常,`catch`块将按照它们在代码中的顺序进行匹配。`catch`参数表中的类型声明用于与`throw`抛出的异常对象进行类型匹配。 异常处理是提高程序...
4. **catch块**:`catch`块是异常处理的主体,用于捕获和处理特定类型的异常。`catch`可以捕获一种或多种异常类型,如`catch(int)`、`catch(...)`等。`catch(...)`可以捕获所有类型的异常,是异常处理的“万能”...
在使用多异常捕获应注意两点:(1)多种异常之间用竖线(|)分隔,(2)捕获多种类型的异常时,在catch块中可以使用instanceof关键字来检测异常的类型。 在Java中,try…catch…finally语句块是异常处理的主要形式...
在本文中,我们将详细介绍 Java 异常处理机制,包括 try、catch、finally 块、throws、throw 关键字、Exception 和 Error 类、Checked Exception 和 Unchecked Exception 等概念,并提供了多种异常处理的示例代码,...
一旦找到匹配的`catch`块,程序就会在该块内执行,直到`catch`块结束。 3. **`throw`表达式**:当一个异常需要被引发时,可以使用`throw`表达式。这个表达式可以是任何类型的值,通常是一个对象,代表了发生的问题...
- **多异常捕获**:Java 7引入了多异常捕获语法,允许在一个catch块中捕获多种类型的异常,提高代码的简洁性。 通过对这些概念的深入理解和实践,开发者能够编写出更健壮、易于维护的Java代码,这对于在IBM ETP这样...