我很想知道,假设我有一个功能说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)
中包含该函数,以便它可以重新启动该函数?有可能吗?
帮助将不胜感激!
答案 0 :(得分: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++;
}
}
}
答案 1 :(得分:0)
这是http://tutorials.jenkov.com/java-exception-handling/basic-try-catch-finally.html#catch-or-propagating-exceptions中关于Catch或Propagate 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
}