在C#中,我可以使用该throw;语句在保留堆栈跟踪的同时重新抛出异常:
try
{
...
}
catch (Exception e)
{
if (e is FooException)
throw;
}
Run Code Online (Sandbox Code Playgroud)
在Java中有这样的东西(不会丢失原始堆栈跟踪)吗?
Bri*_*new 536
catch (WhateverException e) {
throw e;
}
Run Code Online (Sandbox Code Playgroud)
将简单地重新抛出你捕获的异常(显然,周围的方法必须通过其签名等来允许).该异常将保持原始堆栈跟踪.
Mar*_*erg 81
我会比较喜欢:
try
{
...
}
catch (FooException fe){
throw fe;
}
catch (Exception e)
{
// Note: don't catch all exceptions like this unless you know what you
// are doing.
...
}
Run Code Online (Sandbox Code Playgroud)
Olv*_*gor 71
您还可以将异常包装在另一个异常中并通过将Exception作为Throwable作为cause参数传递来保留原始堆栈跟踪:
try
{
...
}
catch (Exception e)
{
throw new YourOwnException(e);
}
Run Code Online (Sandbox Code Playgroud)
alv*_*ves 22
在Java中几乎是一样的:
try
{
...
}
catch (Exception e)
{
if (e instanceof FooException)
throw e;
}
Run Code Online (Sandbox Code Playgroud)
如果将捕获的异常包装到其他异常中(以提供更多信息)或者只是重新抛出捕获的异常,则会保留堆栈跟踪。
try{
...
}catch (FooException e){
throw new BarException("Some usefull info", e);
}
小智 6
这样的事情
try
{
...
}
catch (FooException e)
{
throw e;
}
catch (Exception e)
{
...
}
Run Code Online (Sandbox Code Playgroud)
public int read(byte[] a) throws IOException {
try {
return in.read(a);
} catch (final Throwable t) {
/* can do something here, like in=null; */
throw t;
}
}
Run Code Online (Sandbox Code Playgroud)
这是方法抛出的具体示例IOException.该final方法t只能保存try块抛出的异常.其他阅读材料可以在这里和这里找到.
| 归档时间: |
|
| 查看次数: |
247654 次 |
| 最近记录: |