捕获异常并投掷相同的?

时间:2014-01-07 06:58:18

标签: java exception-handling

请告诉我在以下两个代码块中哪种方法更好?

catch (MyException e) {
    throw new MyException ("Error processing request", e);
}

或者

catch (MyException e) {
    throw e;
}

6 个答案:

答案 0 :(得分:2)

为了比较两种方法,它们应该做同样的事情。这两个不做同样的事情

第一种方法会更好,因为您会将其消息更改为更友好的消息。也许你也可以在重新抛出它之前记录它(stacktrace或其他......)。

第二种方法在性能上更好。实际上,如果你根本没有抓住异常并让它自己抛出它会更好。

您必须根据用户体验以及可能的日志记录或性能选择最佳选择。 默认情况下(并非总是)我会选择第一个

希望我帮忙!

答案 1 :(得分:0)

保留内部异常,我没有问题。虽然,我认为抓住然后再重新抛出是不合理的。当然,抛出定制的异常会更好吗?

答案 2 :(得分:0)

您可以保留StackTrace的情况,没有问题。但它应该是完全意味着,没有必要抓住并抛出相同的Exception

答案 3 :(得分:0)

我没有看到抓住异常并重新抛出它的重点。一旦出现罕见情况,您需要在发生异常时执行某些操作,但同时向调用者报告异常以采取适当的操作。

如果是这种情况那么,第一种方法更好,因为你只是再次抛出相同的异常(而不是创建一次新的)。顺便说一下,两种方法都会保留堆栈跟踪,只是这样的情况就是第一个会避免创建不必要的对象

例如:

catch (MyException e) {
  // May be perform some clean-up activity and throw
    throw new MyException ("Error processing request", e);
}

答案 4 :(得分:0)

如果您想要包含调用方法的任何其他有用信息,可以像第一个选项一样包装原始异常。

答案 5 :(得分:0)

第一种方法,因为第二种方法(在没有任何处理的情况下重新抛出相同的异常)是没用的。

通常,您需要在项目开始时定义异常处理。你会使用已检查或未经检查的例外吗?您会使用标准或自定义例外吗?你将如何使用异常继承?您将在哪里处理(日志)例外?什么是异常中传递的信息。一旦你回答了这些问题,就该开始构建你的API了。