请告诉我在以下两个代码块中哪种方法更好?
catch (MyException e) {
throw new MyException ("Error processing request", e);
}
或者
catch (MyException e) {
throw e;
}
答案 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了。