java提供了很好的異常處理機制,但是如何用好異常并不容易,需要根據開發對象的不同采用的異常機制,本文主要在eclipse rcp開發的時候總結的一個異常的處理機制,個人認為適合于圖形界面開發,總結起來,歸納如下:

(1)合理使用checked exception和unchecked exception,說明使用這兩種異常的原則的文章很多,不多羅嗦了

  (2)異常的轉換,如果需要,可以將底層的異常包裝為包含更多含義的自定義異常重新拋出(包括checked和unchecked的自定義異常體系),自定義異常不僅僅需要包含原始的異常信息,還要包含一些特定的含義和處理方法;

(3) 異常的拋出,盡量不要在中間層處理異常,要么在異常發生的地方處理,要么拋出,推遲到由最終調用層來處理,比如由與用戶直接打交道的UI層,捕捉異常,并以錯誤信息框、對話框等信息載體反饋良好的信息給用戶

 這也只是我個人的一些觀點,希望大家能給出更好的方式

范例:

1)定義自定義的異常:包括了兩個構造函數,一個用于提供默認的異常信息,一個供程序員添加更加詳細的異常信息,這個異常,可以用來封裝所有的底層異常,但是一般在邏輯上更加清楚,可以增加不同的自定義異常,比如數據庫處理異常、文件處理異常、網絡處理異常等

public class DataException extends RuntimeException {

    
public DataException(String str, Throwable cause) {

       
super(str, cause);

    }

    
public DataException(Throwable e) {

       
super("數據操作出錯錯誤", e);

    }  

}

 

2)使用自定義的異常封裝底層異常:
 

public static boolean exportToExcel(String desLocation,String templateName, List list, String beanName) hrows DataException {

boolean ok = false;

Map beans 
= new HashMap();

beans.put(beanName, list);

XLSTransformer transformer 
= new XLSTransformer();

try {

      transformer.transformXLS(templateName, beans, desLocation);

      ok 
= true;

     } 
catch (ParsePropertyException e) {

       
throw new DataException("導出excel出錯,解析excel文件出錯",e);

     } 
catch (IOException e) {

       
throw new DataException("導出excel出錯,文件操作出錯",e);

    }

return ok;

}

 

3)在用戶界面部分的處理,通過MessageDialog反饋給用戶正確的信息:

try {

String templateName 
= BundlePathUtil.getRealPath(Activator.PLUGIN_ID, "excelTplts\\");

    templateName 
= templateName + "aaa.xls";

    
// 從tableviewer中獲取數據

    List list 
= (List) personTableViewer.getInput();

    ExcelUtil.exportToExcel(desLocation, templateName, list,
"aaa");

catch (DataException e) {

// 這里我用了e.getMessage(),但是再更實際的環境中,應該給最終用戶看到的是一個友好的、高層的出錯信息,詳細的出錯信息// 應該在日志文件中體現

      MessageDialog.openError(window.getShell(), 
"導出失敗""失敗原因:"+ e.getMessage());

    
// 退出

return;

    }

    
// 增加導出完成的提示,比如信息框

MessageDialog.openInformation(window.getShell(), 
"導出成功""查詢結果已導入到"+ desLocation);

總結

  根據java異常使用最佳實踐,使用unchecked exception的效率最高,盡管unchecked exception不會強迫用戶捕捉和處理異常,調用層的程序員也可以憑著個人責任心來進行異常的捕獲和處理,但是如果你不捕捉處理異常,隨之而來的是程序的健壯性就得不到保證。

參考資料
Best Practices for Exception Handling
http://www.onjava.com/pub/a/onjava/2003/11/19/exceptions.html