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