在多个方法之间抛出异常时,是否所有方法都重新抛出异常?例如
Method1()
{
Method2();
}
Method2()
{
try
{
// Do something
}
catch
{
throw;
}
}
try
{
Method1();
}
catch
{
// Do something about exception that was thrown from Method2()
}
请注意Method1()
如何,我不需要在Method2()
块中包裹try
,我应该这样做吗?
答案 0 :(得分:9)
您无需将所有内容都包含在try
块中。
如果您想try
某事,您应该catch
,而在以下情况下您应该只catch
:
throw
),答案 1 :(得分:8)
您不需要尝试,捕获和重新抛出异常,除非您有一些特殊原因可以首先捕获它们。否则,它们将自动从较低级别的函数冒出来,这些函数将它们抛出到代码中的最高级别函数。从本质上讲,你可以把它们想象成一直“重新投入”,即使从技术上讲这不是正在发生的事情。
事实上,大多数情况下,您会看到写入try
/ catch
块,但这是不正确的。 除非你能够真正处理它们,否则不应该捕获异常。为了重新抛出异常而捕获异常是完全没有意义的(实际上被认为是不好的做法)。不要将所有代码都包含在try
块中。
请注意,通过“处理它们”,我的意思是catch
块中的代码将根据尝试更正例外的特定异常采取某些特定操作条件。
例如,对于FileNotFoundException
,您可能会通知用户无法找到该文件,并要求他们选择另一个文件。
有关详细信息和“异常处理最佳做法”的详尽讨论,请参阅my answer here。