递归调用exception子句中的函数

时间:2011-12-29 23:19:50

标签: java

我想在异常子句中重试调用一个函数,如下所示:

private int mTries = 0;
private void myFunction() {
    try {
      // do something 
    } catch (Exception e) {
        if (mTries ++ < MAX_TRIES;
             myFunction();
        }
    }
}

我的问题,无论堆栈内存使用情况如何,在catch子句中递归调用函数与在正常情况下调用它一样?如果我的应用程序在Android平台上运行,我很想知道这样做是否会破坏堆栈。

private void anotherFunction(int i) {
      if (i == 0)
            return;
      anotherFunction(i--);
}

3 个答案:

答案 0 :(得分:5)

为什么不这样写呢?

private void myFunction(){
   int triesRemaining = MAX_TRIES;
   while( triesRemaining-- > 0 ){
      try{
         // ... do stuff
         return;
      }
      catch( Exception e ){
      }
   }
   throw new Exception( "too many failures" );
}

但是,我强烈建议您缩小catch子句的范围,以便只捕获那些您希望继续处理的异常类型。

答案 1 :(得分:0)

您的第二个实现将始终导致堆栈溢出。 (尝试传递一个值,即使是1,也会失败)。

答案 2 :(得分:0)

  

我的问题是,无论堆栈内存使用情况如何,在catch子句中递归调用函数与在正常情况下调用它一样?

是的,它完全一样。