【问题标题】:Java: make the Method continue after ExceptionJava:使方法在异常后继续
【发布时间】:2017-07-18 20:37:51
【问题描述】:

我有一些从 Excel 文件中读取的代码,在每一行之后使用逻辑层中的 addValue 方法将数据添加到数据库。

现在我有一个循环遍历行和一个遍历单元格。 从 Excel 读取表格行后,它会执行 addValue 方法,如果出现问题,该方法本身会抛出异常。

程序现在所做的是在第一个异常出现时停止,例如,如果损坏的数据位于该 Excel 文件的中间,它会导入所有内容,直到到达该损坏的数据并停止。

捕捉到 addValue 抛出的异常后如何让它继续?

      try {
                    // abfangen des ersten durchlaufes 
                    if (id == -1) {
                    } else {
                        /*
                         * java.lang.System.out.println(name);
                         * java.lang.System.out.println(id);
                         * java.lang.System.out.println(value);
                         * java.lang.System.out.println(comment);
                         */
                        java.lang.System.out.println("value"+ value);
                        sysInterface.addValue(ident, name, value, comment);

                        workbook.close();
                    }

                } catch (LogicException | IOException e) {
                    
                    
                    Alert alert = new Alert(AlertType.INFORMATION);
                    alert.setTitle("Error Dialog");
                    alert.setHeaderText("Adding Value unsuccessful!");

                    alert.setContentText(e.getMessage()
                            + " Import aborted. \nClassificationNumber " 
      +name+ " has to be in Database before importing.");

                    alert.showAndWait();
                    return;

                }
            }

此块位于一个循环中,该循环运行的次数与 Excel 表的行数一样多。

【问题讨论】:

  • 你认为return; 行在做什么?
  • 如果你得到一个 IOException,你不应该尝试继续阅读。如果文件无法读取,是什么让您认为第二次尝试能够读取它?

标签: java exception


【解决方案1】:

别忘了你也有“finally”的情况,其中,调用之后,错误是caught,你可以从你离开的地方重复。

简短示例:

public foo bar(){
    try{
        // try here
    } catch(Exception here){ 
        //handle here
    }
    finally{ 
        /*
        * you can return to your loop after the exception has been caught, from 
        * here by calling it again, recursively */
    }
}

【讨论】:

  • 我第一次也想到了类似的东西,但似乎想得有点远。 “继续”关键字做到了。无论如何谢谢:)
  • 正如另一位用户之前建议的那样,“继续”可能会导致您的 IDE 出现问题。如果答案对您有帮助,我请您批准。
【解决方案2】:

如果块处于循环中,那么我假设您真正想说的是“试试这个,但捕获任何异常然后跳过有问题的记录并继续循环”。

如果是这种情况,只需将“return”语句更改为“continue”即可。 Continue 关键字表示“跳过循环的这一步中的其余执行并转到下一步。

【讨论】:

  • 建议continue 这里是不谨慎的。 continue 通过该方法打破了“流程”,并有效地禁用了 IDE 的自动重构。在 15 年以上的 Java 编码中,我从来不需要使用 continue。根据 OP 显示的更好的解决方案是简单地删除 return 语句。
  • 就是这样!谢谢你:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-07-06
  • 2021-06-20
  • 2012-04-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-18
相关资源
最近更新 更多