2

我有一个看起来像这样的代码(对不起Java括号样式):

class SomeClass {
   public static void doSomethingRisky() {
        try {
          SomeRiskyFunction();
        } catch (Exception e) {
          throw e;
        }
   }
}

class MainClass {
   public void callSomethingRisky() {
        try {
          SomeClass.doSomethingRisky();
        } catch (Exception e) {
          FinallyHandleTheException(e);
        }
   }
}

基本上,SomeClass将是一个库,我想设计它,以便所有异常都由调用程序处理(谁可能会或可能不会选择显示有关异常的消息)。

我的问题是关于fromtry/catch&throw中的使用。它是多余的还是有必要的?我的意思是,如果我将它关闭并且函数在运行时确实遇到异常,它是否会使程序崩溃,因为在该函数中没有捕获异常,或者它仍然将它传递给调用者(),在那里它被优雅地处理?doSomethingRisky()SomeClasscallSomethingRisky()

Java的同样问题。谢谢!

4

3 回答 3

17

带有in的try/只做一件事:它破坏了堆栈跟踪信息。这可能不是你想要的,所以/应该被删除 - 它已经像预期的那样冒泡了。catchthrow e;doSomethingRiskytrycatch

对于信息,如果它只是throw;(而不是throw e;)那么它只是多余的,而不是破坏性的。

于 2013-06-21T12:26:06.953 回答
4

它将以两种方式传递给调用者。
您在上面显示的构造的用途之一是在过程中记录异常,但仍将其抛出,以便调用堆栈的某处catch可以处理异常。

要记住一件事,throw在这种情况下使用而不是throw e避免丢失堆栈跟踪信息。

于 2013-06-21T12:26:03.513 回答
2

在您的情况下,它是多余的。开发人员通常会向异常添加更多信息,或者创建一个新异常,并将原始异常嵌入为内部异常。但是简单地捕捉并重新抛出是多余的。

于 2013-06-21T12:25:59.200 回答