4 回答

TA貢獻1826條經(jīng)驗 獲得超6個贊
最好的方法是讓每個方法都在內(nèi)部使用try/執(zhí)行catch。
void someMethod(){
try{
//code of method 1
}catch(Exception e){
e.printstackTrace()
}
}
然后在沒有try/的情況下將它們?nèi)空{(diào)用catch。
someTask();
someTask2();
someTask3();
someTask4();
someTask5();
現(xiàn)在,如果一個失敗了,另一個就會繼續(xù)。

TA貢獻1836條經(jīng)驗 獲得超4個贊
假設(shè)您的任務(wù)返回void并且不帶任何參數(shù),您可以創(chuàng)建一個功能接口:
@FunctionalInterface
interface Task {
void perform() throws Exception;
}
然后創(chuàng)建一個輔助方法來處理日志記錄并將其作為Task參數(shù):
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條經(jīng)驗 獲得超3個贊
要運行其余任務(wù),您必須將每個任務(wù)放在單獨的“try”塊中。這是一種干凈的方法。否則,您如何知道哪個任務(wù)失敗以及如何調(diào)試它?
此外,將每個預(yù)期錯誤單獨放在 catch 塊中被認為是一種很好的做法,從更具體的開始,以更一般的結(jié)束。以便您可以立即了解發(fā)生了什么問題并節(jié)省調(diào)試時間
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條經(jīng)驗 獲得超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);
}
}
添加回答
舉報