【问题标题】:How to handle catch block with functions?如何使用函数处理 catch 块?
【发布时间】:2015-02-03 11:15:34
【问题描述】:

我很想知道,假设我有一个函数说myFunction()。看看这个示例:

public void myFunction() {
    try {
        for (int i = 0; i <= 15; i++) {
            System.out.println("Counting: " + i);
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
}

现在,如果在这个函数中发现任何类型的错误,我想处理这个错误,就像myFunction() 一样重新开始。该怎么做?

我的意思是,如何在catch(Exception e) 中包含该函数,以便它可以重新启动该函数?有可能吗?

我们将不胜感激!

【问题讨论】:

  • 您可以在 catch 语句中添加myFunction()
  • 但它在那个函数里面..哈哈。行得通吗?
  • 只有在第二次重试同样的事情确实有可能成功时,才应该这样做。并且应该有一个maxRetry,否则它可能会永远循环。
  • 你为什么要这样做。如果你每次都遇到异常,你的代码永远不会结束。
  • 你听说过递归这个术语吗?我想这就是您所说的,以及您需要执行此操作的具体要求。

标签: java error-handling try-catch


【解决方案1】:
public void myFunction() {
    boolean successful = false;
    int retryCount = 0;
    while(retryCount < 5 && !successful) {
        try {
            for (int i = 0; i <= 15; i++) {
                System.out.println("Counting: " + i);
            }
            successful = true;
        } catch (Exception e) {
            e.printStackTrace();
            successful = false;
            retryCount++;
        }
    }
}

【讨论】:

  • @thilo 添加重试应该很简单,秒
  • 嘿!谢谢..我想问你一件事..你确定它应该是false里面boolean successful = false;吗?为什么不在这里使用true
  • 当然,更聪明的方法是使用某种任务调度程序,它会增加重试之间的延迟时间,例如成倍增加。但这回答了基本问题,即把它放在一个循环中。如果try 块的最后一行是successful = true,那么只有当语句运行成功(没有抛出异常)时才会执行,否则你将留在循环中。
  • 取决于任务是否延迟会有所帮助,或者是否应该调整某些参数(或者如果重试完全没有意义)。
  • 谢谢... :) 在5 minutes之后我会接受你的回答
【解决方案2】:

这是http://tutorials.jenkov.com/java-exception-handling/basic-try-catch-finally.html#catch-or-propagating-exceptions 中关于捕获或传播异常的问题。我还建议您编写自定义异常处理问题并阅读该教程。以下是您必须遵循的事项

视情况而定。在许多应用程序中你真的做不到 很多关于异常的信息,但告诉用户请求的操作 失败的。在这些应用程序中,您通常可以捕获全部或大部分 异常集中在调用堆栈中的第一个方法中。 您可能仍然需要在传播异常时处理它 虽然(使用 finally 子句)。例如,如果发生错误 Web 应用程序中的数据库连接,您可能仍然需要 在 finally 子句中关闭数据库连接,即使你不能 除了告诉用户操作失败之外,做任何其他事情。你怎么 最终处理异常还取决于您是否选择检查 或您的应用程序的未经检查的异常。还有更多内容 错误处理线索中的其他文本。

我建议您以这种方式传播异常:

public void myFunction() 抛出 MyException{

try{

for(int i=0; i<=15;i++){
    System.out.println("Counting: "+i);     
    }

}catch(Exception e){
    e.printStackTrace();
    Thows new MyException()
}

}

public class MyException extends Exception {
    public MyException(String message) {
        super(message);
    }
}

然后你可以在上下文中执行你的函数,如果问题是你想重新启动的原因,你可以重新启动

 begin for example a while lool

try {
   Function();
}catch MyException {
   start again
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-11-12
    • 2017-03-31
    • 1970-01-01
    • 1970-01-01
    • 2023-01-10
    • 2013-01-21
    • 2015-11-15
    相关资源
    最近更新 更多