try
{
...
}
catch (Exception e)
{
if (e instanceof FooException)
throw e;
}
21
在Java中,你只是抛出你捕获的异常,所以 throw e 而不仅仅是 throw . Java维护堆栈跟踪 .
66
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;
}
}
这是方法抛出 IOException 的具体示例 . final 表示 t 只能保存try块抛出的异常 . 其他阅读材料可以在here和here找到 .
8 回答
这样的事情
将简单地重新抛出你捕获的异常(显然,周围的方法必须通过其签名等来允许) . 该异常将保持原始堆栈跟踪 .
我会比较喜欢:
您还可以将异常包装在另一个异常中并通过将Exception作为Throwable作为cause参数传递来保留原始堆栈跟踪:
在Java中几乎是一样的:
在Java中,你只是抛出你捕获的异常,所以
throw e
而不仅仅是throw
. Java维护堆栈跟踪 .这是方法抛出
IOException
的具体示例 .final
表示t
只能保存try块抛出的异常 . 其他阅读材料可以在here和here找到 .如果将捕获的异常包装到另一个异常(提供更多信息)或者只是重新抛出捕获的异常,则堆栈跟踪会被破坏 .
try{ ... }catch (FooException e){ throw new BarException("Some usefull info", e); }