如何从java中的catch块调用方法?

时间:2011-09-14 10:49:05

标签: java exception-handling try-catch

要求:如果有任何例外,请调用重新验证数据的方法

我的实施:

private void one() {
    try {
        //Valid data
    }catch(Exception e) {
    two();
    }
}

private void two() {
     //Process data with another input
     //On entry,
     one();
}

我意识到我的用法不正确。我应该怎么处理这个?

3 个答案:

答案 0 :(得分:5)

您可以使用递归完全按照建议的方式执行此操作。我不知道问题是什么。就个人而言,使用循环通常比使用递归更简单。然而,我不会只捕获所有异常。您可能希望以不同方式处理不同的异常。

private void one() {
  while(true) {
    try {
        //Valid data
        break;
    }catch(InvalidArgumentException e) { // or what ever you expect.
        two();
    }
  }
}

private void two() {
     //Process data with another input
     //On entry,
}

甚至

private void one() {
  while(true) {
    try {
        //Valid data
        break;
    } catch(InvalidArgumentException e) { // or what ever you expect.
        // Process data with another input
        // On entry,
    }
  }
}

答案 1 :(得分:1)

更好的方法是, 在方法one()中使用数据之前,在其他地方检查while循环中的数据, 虽然它无效但在有效之前一直纠正,而不是将其交给one()

在您提出问题之后

将您的error变量设为类级别,并将其重置为方法two(),如下所示,

private void two() {
     this.error = false;
     //Process data with another input
     //On entry,
     one();
}
祝你好运!

答案 2 :(得分:0)

您在代码中显示的用法是正确的 - 是什么让您认为这不正确?

但是,我看到你正在回忆我在评论中的原始方法 -

  1. 如果它继续抛出异常,则会导致堆栈溢出。
  2. 您希望检查一些预防性/不同的逻辑,除非这取决于时间,或者在通话过程中每个条件都会自行更改。
  3. 如果你陷入循环,你应该考虑退出条件。