1. 程式人生 > >coverity&fortify1--Poor Error Handling: Overly Broad Catch

coverity&fortify1--Poor Error Handling: Overly Broad Catch

hang htm 特殊 處理方法 nbsp class sql cep err

1.描述:

  多個 catch 塊看上去既難看又繁瑣,但使用一個“簡約”的 catch 塊捕獲高級別的異常類(如 Exception),可能會混淆那些需要特殊處理的異常,或是捕獲了不應在程序中這一點捕獲的異常。本質上,捕獲範圍過大的異常與“Java 分類定義異常”這一目的是相違背的。


2.風險:

隨著程序的增加而拋出新異常時,這種做法會十分危險。而新發生的異常類型也不會被註意到。

3.例子:

try{
    //IOoperation
    //
}
catch(Exception ex){
    Log(ex);
}

Fortify建議你分別處理可能出現的異常,因為不同類型的異常需要不同的處理方法,所以應該把try{}裏可能出現的異常都枚舉出來,然後分別處理,正確的代碼寫法如下:

try {
    //IOoperation
    //
}
catch (IOException e) {
    logger.error("doExchange failed", e);
}
catch (InvocationTargetException e) {
    logger.error("doExchange failed", e);
}
catch (SQLException e) {
    logger.error("doExchange failed", e);
}

  

coverity&fortify1--Poor Error Handling: Overly Broad Catch