我想在异常子句中重试调用一个函数,如下所示:
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--);
}
答案 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子句中递归调用函数与在正常情况下调用它一样?
是的,它完全一样。