gpt4 book ai didi

java - 在 catch block 中重新抛出异常是否有意义?

转载 作者:搜寻专家 更新时间:2023-11-01 01:13:38 24 4
gpt4 key购买 nike

从 catch block 中抛出异常只是为了记录消息以便我们确定是什么导致了异常是否有意义?

代码

  public void saveLogs(Logs logs) throws RemoteException
{
try
{
LogsOps.saveLogs(logs);
}
catch (RemoteException e)
{
log.info("RemoteException is thrown while trying to save logs ", e);
throw new RemoteException("RemoteException caused while trying to save", e);
}
}

为了回应下面的评论之一,该方法会抛出 StackOverFlow 异常,这里是 log.info 的实际实现,它只显示这些错误。

     /** Log the message and the exception with a level of INFO.
* @param message - The message text.
* @param t - An exception to display.
*/
public void info(Object message, Throwable t)
{
String nullSafeMessage = (message != null) ? message.toString() : t.getClass().getSimpleName();
log.info(nullSafeMessage, t);
}

因此永远不会抛出 Stackoverflow 异常。

最佳答案

这取决于更高层捕获异常的内容。如果没有什么else 会记录消息,那么当然,这是有道理的 - 虽然我可能会重新抛出原始异常而不是创建一个新异常:

catch (RemoteException e)
{
log.info("RemoteException is thrown while trying to save logs ", e);
throw e;
}

不过,理想情况下,您应该在堆栈的较高位置有一个单独的 catch block ,它会适本地记录 - 如果您只是记录异常,那可以无论如何获取所有信息。

当您想记录异常中的信息时,捕获/记录/重新抛出是有意义的,例如参数值。

关于java - 在 catch block 中重新抛出异常是否有意义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13822203/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com