当前位置: 首页 > 知识库问答 >
问题:

如何实现重试捕获?

凌征
2023-03-14

Try-catch旨在帮助处理异常。这意味着它将帮助我们的系统更加健壮:尝试从一个意外事件中恢复。

我们怀疑在执行and指令(发送消息)时可能会发生一些事情,因此它被封闭在try中。如果发生了几乎意想不到的事情,我们可以做一些事情:我们编写catch。我不认为我们打电话只是为了记录异常。我认为catch块是为了给我们从错误中恢复的机会。

现在,假设我们可以从错误中恢复,因为我们可以修复错误。再试一次可能会非常好:

try{ some_instruction(); }
catch (NearlyUnexpectedException e){
   fix_the_problem();
   retry;
}

这将很快落入永恒循环,但假设fix_the_problem返回true,然后重试。既然Java没有这样的事情,你会怎么解决这个问题呢?解决这一问题的最佳设计代码是什么?

这就像一个哲学问题,鉴于我已经知道我所要求的并不是Java直接支持的。

共有1个答案

韦高谊
2023-03-14

您需要将try-catch封闭在while循环中,如下所示:-

int count = 0;
int maxTries = 3;
while(true) {
    try {
        // Some Code
        // break out of loop, or return, on success
    } catch (SomeException e) {
        // handle exception
        if (++count == maxTries) throw e;
    }
}

我使用了countmaxtries来避免在try block中继续出现异常的情况下运行到无限循环。

 类似资料:
  • 问题内容: Try-catch旨在帮助处理异常。这意味着它将以某种方式帮助我们的系统更强大:尝试从意外事件中恢复。 我们怀疑在执行和指令(发送消息)时可能会发生某些事情,因此将其包含在try中。如果发生了几乎不可预料的事情,我们可以采取一些措施:编写渔获物。我不认为我们打电话来只是记录异常。我认为catch块旨在为我们提供从错误中恢复的机会。 现在,假设我们从错误中恢复了,因为我们可以修复错误所在

  • 问题内容: 如何在catch块中实现代码? 问题答案: 不建议这样做,这可能会在程序中引起严重的问题。例如,如果数据库关闭了怎么办? 但是,这是循环执行的方法: 更新: 令人失望的先生在下面的评论中提到:该方法将执行暂停指定的毫秒数。没有错误是完全随机的,大多数错误只能通过 再次尝试 才能起作用,因为两次尝试之间的时间有所变化。暂停执行线程将为发生这种情况提供更大的机会(例如,数据库引擎有更多的启

  • 鉴于: 我想尝试,并重试,连接到服务器3次才放弃。 我可以把整个try/catch放在一个循环中,但是这是否符合Java的“最佳实践”。从我对该主题的回忆来看,这将是对语句的误用。再说一次,我可能完全错了。你怎么认为?

  • Java7编译器是如何处理多捕获块的?一个简单的实现是生成字节码,就好像存在多个catch块一样。然而,我从多个来源得到的信息表明,情况并非如此--处理多个异常类型的catch块在编译期间不会产生重复的字节码。 那么,它是如何工作的呢?是否有一个新的字节码指令告诉JVM关于多捕获块?

  • 问题内容: 每当抛出javascript异常时,我们还想做一些额外的事情。 从以下文档: 角度表达式中任何未捕获的异常都委托给此服务。默认的实现只是将$ log.error委托给浏览器控制台。 它说“默认实现”的事实使我认为有一种方法可以为服务提供我们自己的实现,并在引发异常时做我们想要的事情。我的问题是,你如何做到这一点?我们如何使所有异常都保留给该服务,然后提供我们希望发生的功能? 问题答案: