gpt4 book ai didi

java - 多次或一次 try catch

转载 作者:IT老高 更新时间:2023-10-28 20:32:18 27 4
gpt4 key购买 nike

我正在清理我的一些代码,但我不确定哪条路线会更好。

目前,我的大部分方法都有一个 try catch block ,它在最后处理一些单独的异常,但我认为拥有更多的 try catch block 会更好地进行维护。然而,在分解代码时,我发现我正在为同一类型的异常编写多个 block 。我可以看到为每个部分编写一个 block 的好处,因为我可以详细说明它失败的原因。

我的问题是……这样做有缺点吗?会不会有性能问题或其他一些我没有看到的隐藏怪物?

另外,在一个方法中处理多个异常的首选方法是什么,是否有行业标准?

为了更好地说明我的观点,这里有一些伪代码

//multiple try catch for same exception
try {
//some code here
} catch (MyException e) {
//specific error message here
}
try {
//some different code here
} catch (MyException e) {
//more specific error message indicating a different issue
}

最佳答案

这不是性能或个人偏好问题:这是一个功能和需求问题。

假设我写:

场景 1:

try
{
doThingA();
}
catch (SomeException panic)
{
System.out.println("doThingA failed");
}
try
{
doThingB();
}
catch (SomeException panic)
{
System.out.println("doThingB failed");
}

场景 2:

try
{
doThingA();
doThingB();
}
catch (SomeException panic)
{
System.out.println("doThingA or doThingB failed");
}

这两种情况并不等同:它们做不同的事情。在场景 1 中,如果 doThingA 抛出异常,doThingB 仍会执行。在场景 2 中,如果 doThingA 抛出异常,则不会执行 doThingB。所以问题不在于哪个提供更好的性能或哪个代码更易读,而是如果 doThingA 失败,是否还应该执行 doThingB?

如果你真正想要的是第二种行为,但你想要不同的消息告诉用户出了什么问题,那么你应该抛出不同的异常,或者将消息的文本放入异常中,即

void doThingA() throws SomeException
{
... whatever code ...
if (theWorldIsAboutToEnd)
throw new SomeException("doThingA failed");
}

然后在 catch 子句中,不显示常量字符串,而是显示 SomeException.toString 或 SomeException.getMessage。

关于java - 多次或一次 try catch ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4555322/

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