抛出或重新抛出异常?

时间:2012-01-11 17:02:18

标签: java exception

如果我加入了catch子句:

...
catch(Exception e)
{
    throw new Exception("msg", e); 
}

我是否抛出或重新抛出e异常?

所以说使用throw子句是正确的 在使用它时,重新抛出异常 进入试块或其他地方抛出异常?

最终何时或何地抛出异常以及重新抛出异常的时间或地点?

感谢。

6 个答案:

答案 0 :(得分:4)

我会称之为抛出异常。

这是重新抛出异常:

...
catch(Exception e)
{
    throw e;
}

如果我想将几个例外包装成一个,或者如果我想添加新信息,我会抛出一个新的异常。如果没有,我认为重新抛出它会更好。

答案 1 :(得分:4)

你第一次抛出异常。

throw new Exception();

你重新抛出一个被捕获的异常

} catch (Exception e) {
   // do something
   throw e;
}

通过抛出包含该异常的其他异常来包装异常。

} catch (Exception e) {
   // do something
   throw new Exception(e);
}

答案 2 :(得分:0)

http://www.codinghorror.com/blog/2004/07/rethrowing-exceptions.html

此链接可帮助您决定何时重新抛出异常。

通常,catch应该能够自己处理异常,但如果不能,那么我建议重新抛出异常。需要注意的另一件事是catch(例如在控制器与模型中,你通常需要在控制器动作中捕获,以便你可以在视图中处理它。但是,模型经常发生例外)

答案 3 :(得分:0)

回答最后一个问题:

如果这样做会增加价值,则抛出新的异常。例如,在特定于应用程序的异常中包含底层异常以便在更高层中使用是很常见的。这些应该几乎总是被链接起来以保留原始异常的信息。

IMO重新投掷通常不是一个好主意,因为将从异常链/堆栈跟踪中删除一层上下文。 OTOH,如果你真的不能做任何事情,重新投掷可能是最有意义的。在这种情况下,我通常会指出方法throws,除非需要清理本地资源/等,否则不要进行本地异常处理。

答案 4 :(得分:0)

如果执行业务条件不符合某些先决条件,我们将抛出自定义异常,例如,如果账户余额为0,无法借记,则会抛出NotSufficientAmountException。

re-throw是出于不同的目的,一,让调用者知道发生了错误的事情,二,将堆栈跟踪传递给调用者,详细说明发生了哪一行代码错误等。

答案 5 :(得分:0)

你的问题是:“我是否会抛弃或重新抛出异常?”

你既没有投掷也没有重新抛出e异常 你正在抛出一个带有一些新消息的新异常。 原始e异常(被捕获的异常)是您抛出新异常的原因,因此它将出现在新抛出的异常的causeBy中。

噢,小伙子。