<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    歡迎使用我的 在線工具

    小D

    讀歷史、看小說、寫程序都是我所愛。技術不好,頭腦不靈光,靠的是興趣。
    隨筆 - 35, 文章 - 25, 評論 - 13, 引用 - 0
    數據加載中……

    Java異常使用的“最佳實踐”

    下面作者將介紹界中使用異常的最佳實踐( Best Practices for Using Exceptions
    1
    總是要做一些清理工作( Always clean up after yourself
    如果你使用一些資源例如數據庫連接或者網絡連接,請記住要做一些清理工作(如
    關閉數據庫連接或者網絡連接),如果你的 API 拋出 Unchecked exception ,那么你
    要用 try-finally 來做必要的清理工作:
    public void dataAccessCode(){
    Connection conn = null;
    try{
    conn = getConnection();
    ..some code that throws SQLException
    }catch(SQLException ex){
    ex.printStacktrace();
    } finally{
    DBUtil.closeConnection(conn); } }
    class DBUtil{
    public static void closeConnection
    (Connection conn){
    try{
    conn.close();
    } catch(SQLException ex){
    logger.error("Cannot close connection");
    throw new RuntimeException(ex); } } }
    DBUtil
    是一個工具類來關閉 Connection. 有必要的說的使用的 finally 的重要性是不
    管程序是否碰到異常,它都會被執行。在上邊的例子中, finally 中關閉連接,如果
    在關閉連接的時候出現錯誤就拋出 RuntimeException.
    2
    不要使用異常來控制流程( Never use exceptions for flow control
    下邊代碼中, MaximumCountReachedException 被用于控制流程:
    public void useExceptionsForFlowControl() {
    try {
    while (true) {
    increaseCount(); }
    } catch (MaximumCountReachedException ex) { }
    //Continue execution }
    public void increaseCount()
    throws MaximumCountReachedException {
    if (count >= 5000)
    throw new MaximumCountReachedException(); }
    上邊的 useExceptionsForFlowControl() 用一個無限循環來增加 count 直到拋出異常
    ,這種做法并沒有說讓代碼不易讀,但是它是程序執行效率降低。
    記住,只在要會拋出異常的地方進行異常處理。
    3
    不要忽略異常
    當有異常被拋出的時候,如果你不想恢復它,那么你要毫不猶豫的將其轉換為
    unchecked exception
    ,而不是用一個空的 catch 塊或者什么也不做來忽略它,以至
    于從表面來看象是什么也沒有發生一樣。
    4
    不要捕獲頂層的 Exception
    unchecked exception
    都是 RuntimeException 的子類, RuntimeException 又繼承
    Exception,
    因此,如果單純的捕獲 Exception, 那么你同樣也捕獲了
    RuntimeException,
    如下代碼:
    try{ ..
    }catch(Exception ex){ }
    一旦你寫出了上邊的代碼(注意 catch 塊是空的),它將忽略所有的異常,包括
    unchecked exception.
    5
    Log exceptions just once
    Logging the same exception stack trace more than once can confuse the
    programmer examining the stack trace about the original source of
    exception. So just log it once.
    總結
    這里給出了一些關于異常處理的一些最佳實踐,我并不想開始另一輪的關于 checked
    exception
    unchecked exception 的爭論。你可以根據自己的實際情況定制自己
    異常處理,我堅信我們將有更好的辦法來處理我們代碼中的異常。
    在此,我將感謝 Bruce Eckel, Joshua Kerievsky, Somik Raha 對于寫這篇文章所
    給于我的支持。

    ?

    我的理解:

    1 .盡量不要在發布的程序中使用打印調用棧的信息處理異常,因為這樣在發布的程序中根本不可見,就如同忽略處理異常一樣。而是要么將其處理,要么將其包裝后拋出,我們對于客戶端不能處理,也沒必要處理的異常通常包裝為 RuntimeExcepion 這樣客戶程序可以選擇是否獲取其異常信息,給客戶程序一個選擇處理的機會。如:顯示到客戶端。更不要忽略異常,記住只打印調用堆棧和忽略異常是等價的,當然開發及調試的時候除外。

    2 .因為異常是非常消耗資源的,所以不要使用異常做流程控制。

    3 .總是優先使用 UnCheckedException 。

    4 .不要自定義過多的異常類,因為 Java 的異常信息已經將這個異常描述得夠清晰了。要么使這個異常類承擔更多的責任。

    5. 不要將過多的代碼寫入到一個 try 語句中,通常 try 語句只包含需要處理的代碼。

    6. Checked 異常只是為了使程序員寫出更健壯的代碼而發明的。但是由于設計的失誤對于一些無法恢復,或者很難恢復的異常也作為 Checked 異常 ,是一個錯誤的決定。事實證明不適用的 Checked 異常的 C++ C# 的異常處理機制比 Java 更成功。

    7. 不要在程序中包含過多的異常處理語句,這樣會使你的語句難以理解,會使你的程序的效率變慢。只在需要的處理的地方處理異常

    8. 不要把底層的異常拋給業務層,要么處理要么包裝后拋給業務層。因為業務層不關心這個。

    9. 對于能處理的異常盡量處理,否則拋出。優先考慮 RuntimeExcepion 包裝。

    posted on 2009-11-04 20:55 vagasnail 閱讀(496) 評論(0)  編輯  收藏 所屬分類: Java

    主站蜘蛛池模板: 国产免费午夜a无码v视频| 亚洲成AV人片一区二区| 国产日韩在线视频免费播放| 国产国拍精品亚洲AV片| 永久在线观看www免费视频| 亚洲精品无码av中文字幕| 亚洲人成网站18禁止一区| 免费观看在线禁片| 亚洲国产欧美一区二区三区| 国产中文在线亚洲精品官网| 免费在线视频你懂的| 无忧传媒视频免费观看入口| 亚洲av无码一区二区三区不卡| 国产精品免费观看久久| 国产无遮挡色视频免费观看性色| 亚洲成a人片7777| 亚洲日韩中文字幕日韩在线| 久久A级毛片免费观看| 男人扒开添女人下部免费视频| 中文字幕在线观看亚洲| 免费在线视频一区| 最近免费中文字幕大全免费版视频| 精品国产亚洲一区二区三区在线观看 | 亚洲av无码不卡久久| 亚洲国产电影av在线网址| 黄在线观看www免费看| 一本一道dvd在线观看免费视频| 亚洲春色在线观看| 中文字幕亚洲乱码熟女一区二区| 一二三四在线观看免费高清中文在线观看| 国产精品永久免费视频| 亚洲小说图区综合在线| 亚洲一区二区电影| 亚洲日韩在线观看| 日本免费高清一本视频| 99久久99久久精品免费看蜜桃| 中文字幕免费在线看线人动作大片| 亚洲人成电影网站色| 亚洲字幕在线观看| 亚洲AV日韩AV永久无码下载| 亚洲国产av一区二区三区|