Java 捕获异常并抛出相同的异常?

Java 捕获异常并抛出相同的异常?,java,exception-handling,Java,Exception Handling,您能告诉我在下面两个代码块中哪种方法更好吗 catch (MyException e) { throw new MyException ("Error processing request", e); } 或 保留内部异常,我就没有问题了。尽管如此,我认为这样接住然后再抓是没有意义的。当然,抛出一个定制的异常会更好吗?保留内部异常,我没有问题。尽管如此,我认为这样接住然后再抓是没有意义的。当然,抛出一个定制的异常会更好吗?为了比较两种方法,它们应该做同样的事情。这两个做的事情不一样 第

您能告诉我在下面两个代码块中哪种方法更好吗

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


保留内部异常,我就没有问题了。尽管如此,我认为这样接住然后再抓是没有意义的。当然,抛出一个定制的异常会更好吗?

保留内部异常,我没有问题。尽管如此,我认为这样接住然后再抓是没有意义的。当然,抛出一个定制的异常会更好吗?

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

第一种方法会更好,因为您可以将其消息更改为更用户友好的消息。也许你也可以在重新播放之前把它记录下来(stacktrace或其他什么…)

第二种方法在性能方面更好。事实上,如果您根本不捕获异常并让它自己抛出,那就更好了

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


希望我能帮忙

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

第一种方法会更好,因为您可以将其消息更改为更用户友好的消息。也许你也可以在重新播放之前把它记录下来(stacktrace或其他什么…)

第二种方法在性能方面更好。事实上,如果您根本不捕获异常并让它自己抛出,那就更好了

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


希望我能帮忙

无论您能保留什么样的情况,都没有问题。但它应该是指完整的,没有点捕获和抛出相同的
异常

无论您能保留什么样的情况,都没有问题。但它应该是指完整的,没有点捕获和抛出相同的
异常

我不认为捕获异常并再次抛出它有什么意义。曾经罕见的情况是,当异常发生时,您需要执行一些操作,但同时将异常报告给调用方以采取适当的操作

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

例如:


我不认为捕获异常并再次抛出它有什么意义。曾经罕见的情况是,当异常发生时,您需要执行一些操作,但同时将异常报告给调用方以采取适当的操作

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

例如:


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

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

第一个,因为第二种方法(在不进行任何处理的情况下重新显示相同的异常)是无用的


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

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


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

即使我们告诉你try/catch/throw和throws是如何工作的,你不是刚刚问了一个类似问题并结束了主题的那个人吗?编辑:没关系!我会投票支持第一种方法..Generally,你捕捉到很多异常,把它们归纳成一个,然后扔掉..这样所有类似的异常都可以用同样的方式处理..@DanPantry-不..他不是..那家伙的名声不太好(我想)..:Poption 2是一个NOP..,其中@RC.表示没有点捕获,然后立即重新抛出相同的异常,同时不做任何其他操作。您也可以不捕获异常,让它自然传播。当然,如果您在catch块中做了其他操作,那么可能会有原因导致他的。把它说清楚怎么样?即使我们告诉了你try/catch/throw和throws是如何工作的,你也只是问了一个类似的问题并结束了话题的那个人吗?编辑:没关系!我会投票赞成第一种方法。一般来说,你会发现很多异常,把它们归纳成一个,然后抛出它。所以所有类似的异常可以用同样的方式处理。@DanPantry-不,他不是。。那个家伙的名声不太好(我想)…第二个选项是否定的。@RC。意味着没有抓住的意思,然后立即重新开始
catch (MyException e) {
    throw e;
}
catch (MyException e) {
  // May be perform some clean-up activity and throw
    throw new MyException ("Error processing request", e);
}