为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

UYOU 2023-09-20 16:02:19
try{someTask();someTask2();someTask3();someTask4();someTask5();}catch (Exception e){// log the error}如果我的一项任务失败,我想要一份所发生情况的日志,但我想继续运行其余任务。我知道我可以用自己的 try/catch 包围每个任务方法,但是有没有一种更干净的方法,这样我就没有那么多的 try/catch 块?
查看完整描述

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();

现在,如果一个失败了,另一个就会继续。


查看完整回答
反对 回复 2023-09-20
?
HUH函数

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");

    }

}


查看完整回答
反对 回复 2023-09-20
?
米脂

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

}


查看完整回答
反对 回复 2023-09-20
?
守着星空守着你

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);


}


}


查看完整回答
反对 回复 2023-09-20
  • 4 回答
  • 0 关注
  • 262 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信