4 回答
TA贡献1826条经验 获得超6个赞
最好的方法是让每个方法都在内部使用try/执行catch。
void someMethod(){
try{
//code of method 1
}catch(Exception e){
e.printstackTrace()
}
}
然后在没有try/的情况下将它们全部调用catch。
someTask();
someTask2();
someTask3();
someTask4();
someTask5();
现在,如果一个失败了,另一个就会继续。
TA贡献1836条经验 获得超4个赞
假设您的任务返回void并且不带任何参数,您可以创建一个功能接口:
@FunctionalInterface
interface Task {
void perform() throws Exception;
}
然后创建一个辅助方法来处理日志记录并将其作为Task参数:
private static void invoke(Task task) {
try {
task.perform();
} catch (Exception e) {
// log here
}
}
然后使用它:
class MyClass {
public static void main(String[] args) {
invoke(MyClass::someTask);
invoke(MyClass::someTask1);
}
private static void someTask() throws Exception {
System.out.println("Task 1");
}
private static void someTask1() throws Exception {
throw new Exception("Exception");
}
}
TA贡献1836条经验 获得超3个赞
要运行其余任务,您必须将每个任务放在单独的“try”块中。这是一种干净的方法。否则,您如何知道哪个任务失败以及如何调试它?
此外,将每个预期错误单独放在 catch 块中被认为是一种很好的做法,从更具体的开始,以更一般的结束。以便您可以立即了解发生了什么问题并节省调试时间
try {
someTask1;
}catch (ClassNotFoundException e) {
// log the error
}catch (Exception e) {
// log the error
}
try {
someTask2;
}catch (ArithmeticException e) {
// log the error
}catch (ArrayIndexOutOfBoundsException e) {
// log the error
}catch (Exception e) {
// log the error
}
TA贡献1799条经验 获得超8个赞
也许使用递归方法:
public void myMethod (int state){
try
{
switch(state) {
case 1:
state+=1;
someTask();
myMethod(state);
break;
case 2:
state+=1;
someTask2();
myMethod(state);
break;
case 3:
state+=1;
someTask3();
myMethod(state);
break;
default:
state=-1;
}
}
catch (Exception e)
{
// If some task had an exception, this catch call the next task, because the state variable incremented.
myMethod(state);
}
public static void main (String[] Args){
myMethod(1);
}
}
添加回答
举报