<address id="xpjh9"><listing id="xpjh9"><meter id="xpjh9"></meter></listing></address>

<address id="xpjh9"><address id="xpjh9"><listing id="xpjh9"></listing></address></address>
<noframes id="xpjh9">
<noframes id="xpjh9">

<address id="xpjh9"><address id="xpjh9"><listing id="xpjh9"></listing></address></address>
    <form id="xpjh9"></form><address id="xpjh9"><listing id="xpjh9"><menuitem id="xpjh9"></menuitem></listing></address>

      <noframes id="xpjh9">
      VB.net 2010 視頻教程 VB.net 2010 視頻教程 VB.net 2010 視頻教程
      SQL Server 2008 視頻教程 c#入門經典教程 Visual Basic從門到精通視頻教程
      當前位置:
      首頁 > 編程開發 > Java教程 >
      • java教程之Java 異常處理的原則和忌諱

      • 2015-01-24 09:28 來源:未知

      1、  Java 異常處理的原則和忌諱(相關java教程)
      Java 異常處理的原則

      1        盡可能的處理異常
      要盡可能的處理異常,如果條件確實不允許,無法在自己的代碼中完成處理,就考慮聲明異常。如果人為避免在代碼中處理異常,僅作聲明,則是一種錯誤和依賴的實踐。
      2        具體問題具體解決
      異常的部分優點在于能為不同類型的問題提供不同的處理操作。有效異常處理的關鍵是識別特定故障場景,并開發解決此場景的特定相應行為。為了充分利用異常處理能力,需要為特定類型的問題構建特定的處理器塊。
      3        記錄可能影響應用程序運行的異常
      至少要采取一些永久的方式,記錄下可能影響應用程序操作的異常。理想情況下,當然是在第一時間解決引發異常的基本問題。不過,無論采用哪種處理操作,一般總應記錄下潛在的關鍵問題。別看這個操作很簡單,但它可以幫助您用很少的時間來跟蹤應用程序中復雜問題的起因。
      4        根據情形將異常轉化為業務上下文
      若要通知一個應用程序特有的問題,有必要將應用程序轉換為不同形式。若用業務特定狀態表示異常,則代碼更易維護。從某種意義上講,無論何時將異常傳到不同上下文(即另一技術層),都應將異常轉換為對新上下文有意義的形式。
      Java 異常處理的忌諱
      1        一般不要忽略異常
      在異常處理塊中,一項最危險的舉動是“不加通告”地處理異常。如下例所示:
      1   try{
      2       Class.forName("business.domain.Customer");
      3   }
      4   catch (ClassNotFoundException exc){}
      經常能夠在代碼塊中看到類似的代碼塊。有人總喜歡在編寫代碼時簡單快速地編寫空處理器塊,并“自我安慰地”宣稱準備在“后期”添加恢復代碼,但這個“后期”變成了“無期”。
      這種做法有什么壞處?如果異常對應用程序的其他部分確實沒有任何負面影響,這未嘗不可。但事實往往并非如此,異常會擾亂應用程序的狀態。此時,這樣的代碼無異于掩耳盜鈴。
      這種做法若影響較輕,則應用程序可能出現怪異行為。例如,應用程序設置的一個值不見了, 或 GUI 失效。若問題嚴重,則應用程序可能會出現重大問題,因為異常未記錄原始故障點,難以處理,如重復的 NullPointerExceptions。
      如果采取措施,記錄了捕獲的異常,則不可能遇到這個問題。實際上,除非確認異常對代碼其余部分絕無影響,至少也要作記錄。進一步講,永遠不要忽略問題;否則,風險很大,在后期會引發難以預料的后果。
      2        不要使用覆蓋式異常處理塊
      另一個危險的處理是覆蓋式處理器(blanket handler)。該代碼的基本結構如下:
      1   try{
      2     // …
      3   }
      4   catch(Exception e){
      5     // …
      6   }
      使用覆蓋式異常處理塊有兩個前提之一:
      1        代碼中只有一類問題。
      這可能正確,但即便如此,也不應使用覆蓋式異常處理,捕獲更具體的異常形式有利物弊。
      2        單個恢復操作始終適用。
      這幾乎絕對錯誤。幾乎沒有哪個方法能放之四海而皆準,能應對出現的任何問題。
      分析下這樣編寫代碼將發生的情況。只要方法不斷拋出預期的異常集,則一切正常。但是,如果拋出了未預料到的異常,則無法看到要采取的操作。當覆蓋式處理器對新異常類執行千篇一律的任務時,只能間接看到異常的處理結果。如果代碼沒有打印或記錄語句,則根本看不到結果。
      更糟糕的是,當代碼發生變化時,覆蓋式處理器將繼續作用于所有新異常類型,并以相同方式處理所有類型。
      一般不要把特定的異常轉化為更通用的異常
      將特定的異常轉換為更通用異常時一種錯誤做法。一般而言,這將取消異常起初拋出時產生的上下文,在將異常傳到系統的其他位置時,將更難處理。見下例:
      1   try{
      2     // Error-prone code
      3   }
      4   catch(IOException e){
      5      String msg = "If you didn ’ t have a problem before,you do now!";
      6      throw new Exception(msg);
      7   }
      因為沒有原始異常的信息,所以處理器塊無法確定問題的起因,也不知道如何更正問題。
      不要處理能夠避免的異常
      對于有些異常類型,實際上根本不必處理。通常運行時異常屬于此類范疇。在處理空指針或者數據索引等問題時,不必求助于異常處理。
      相關教程
      江苏快3 唐山 | 琼中 | 灌南 | 乐平 | 吉安 | 厦门 | 洛阳 | 昭通 | 大连 | 顺德 | 塔城 | 海南海口 | 连云港 | 深圳 | 渭南 | 锦州 | 马鞍山 | 塔城 | 阜阳 | 普洱 | 甘孜 | 六安 | 威海 | 临汾 | 博尔塔拉 | 黄南 | 西藏拉萨 | 灌南 | 定西 | 泰安 | 枣庄 | 丹阳 | 长垣 | 常德 | 固原 | 内江 | 铁岭 | 凉山 | 莆田 | 吉林长春 | 河池 | 安康 | 甘孜 | 日土 | 哈密 | 安徽合肥 | 吐鲁番 | 象山 | 萍乡 | 内蒙古呼和浩特 | 商丘 | 陇南 | 固原 | 宜昌 | 铜川 | 汉中 | 东方 | 吉林长春 | 南通 | 海南海口 | 郴州 | 昆山 | 庆阳 | 吉林长春 | 鄂州 | 黔南 | 陇南 | 扬州 | 雅安 | 石河子 | 吕梁 | 温州 | 克孜勒苏 | 襄阳 | 宁波 | 南京 | 牡丹江 | 三河 | 临猗 | 天长 | 黔东南 | 阜阳 | 长葛 | 绥化 | 揭阳 | 乐平 | 白银 | 慈溪 | 宜都 | 滁州 | 日喀则 | 赤峰 | 阿坝 | 宿州 | 潜江 | 白山 | 福建福州 | 四平 | 海门 | 黄山 | 武夷山 | 温岭 | 禹州 | 镇江 | 台山 | 莆田 | 长治 | 丹东 | 三沙 | 泉州 | 林芝 | 常德 | 台中 |