try/catch 块捕获异常后如何继续执行代码?

try

{

someTask();

someTask2();

someTask3();

someTask4();

someTask5();

}

catch (Exception e)

{

// log the error

}


如果我的一项任务失败,我想要一份所发生情况的日志,但我想继续运行其余任务。我知道我可以用自己的 try/catch 包围每个任务方法,但是有没有一种更干净的方法,这样我就没有那么多的 try/catch 块?


UYOU
浏览 268回答 4
4回答

跃然一笑

最好的方法是让每个方法都在内部使用try/执行catch。void someMethod(){ try{//code of method 1 }catch(Exception e){  e.printstackTrace() }}然后在没有try/的情况下将它们全部调用catch。someTask();someTask2();someTask3();someTask4();someTask5();现在,如果一个失败了,另一个就会继续。

HUH函数

假设您的任务返回void并且不带任何参数,您可以创建一个功能接口:@FunctionalInterfaceinterface 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");    }}

米脂

要运行其余任务,您必须将每个任务放在单独的“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}

守着星空守着你

也许使用递归方法: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);}}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java