亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

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 關注
  • 378 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號