在c#中,我可以使用throw;语句在保留堆栈跟踪的同时重新抛出异常:
try
{
...
}
catch (Exception e)
{
if (e is FooException)
throw;
}
Java中是否有类似的东西(不会丢失原始堆栈跟踪)?
在c#中,我可以使用throw;语句在保留堆栈跟踪的同时重新抛出异常:
try
{
...
}
catch (Exception e)
{
if (e is FooException)
throw;
}
Java中是否有类似的东西(不会丢失原始堆栈跟踪)?
当前回答
在Java中几乎是一样的:
try
{
...
}
catch (Exception e)
{
if (e instanceof FooException)
throw e;
}
其他回答
我更喜欢:
try
{
...
}
catch (FooException fe){
throw fe;
}
catch (Exception e)
{
// Note: don't catch all exceptions like this unless you know what you
// are doing.
...
}
就像这样
try
{
...
}
catch (FooException e)
{
throw e;
}
catch (Exception e)
{
...
}
在Java中,您只需抛出捕获的异常,因此抛出e而不是抛出。Java维护堆栈跟踪。
catch (WhateverException e) {
throw e;
}
将简单地重新抛出您捕获的异常(显然,周围的方法必须通过其签名等允许这样做)。异常将维护原始堆栈跟踪。
如果将捕获的异常包装到其他异常中(以提供更多信息),或者只是重新抛出捕获的异常,则会保留堆栈跟踪。
尝试{ ... }catch (FooException e){ throw new BarException("Some useful info", e); }