熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java核心技術 >> 正文

Java異常

2013-11-23 19:02:33  來源: Java核心技術 

  在可能會出現exception的地方要使用try-catch或者throws或者兩者都要我的判斷依據是如果對可能出現的exception不想被外部(方法的調用者)知道就在方法內部try-catch掉這個exception如果希望外部知道則在catch到之後把exception直接拋出或者拋出自定義的exception

  一異常的種類

  java異常可以分成兩大類Exception和RuntimeException(雖然RuntimeException是從Exception繼承的)exception異常代表無法避免的異常 如io異常   往往這類異常是由於外部原因造成的程序本身無法保證他們不發生所以這類異常必須捕獲如果在函數內部無法處理這個異常必須再次拋出(在函數後面用throws語句)如果什麼都不做就出現編譯錯誤

  runtimexception是指可以避免的異常如 null引用異常這類異常都是由程序內部原因造成的是可以避免的對於這類異常可以忽略他們但一旦發生程序就會異常終止這類異常對debug非常有幫助當然如果需要也可以catch

  另外有些地方即使不會有exception但是從商業邏輯上是錯誤的非預期的也可以拋出user exception例如用戶輸入非法bank account非法透支等等

  二主要原則

  處理意外的一個重要原則就是要麼處理要麼接著拋決不能吃掉(You either handle it or throw it You dont eat it)這就是說當你捕獲一個異常之後必須決定是否立即處理這個異常或者繼續拋出這個異常(或者另一個自定義異常)以便由調用的客戶端捕獲之當客戶端捕獲到以後又會繼續進行類似的判斷

  一般來說GUI端是要處理異常的比如JSP捕獲到異常之後需要先是給用戶一個友好的出錯信息而不要給出系統的出錯信息系統的出錯信息一方面不太友好另一方面提供了太多的系統信息容易被惡意用戶用來攻擊系統

  換句話說所有的異常最終必須有一個終極的處理者這就是GUI至於中間的環節比如在服務器端運行的JavaBean是否要處理捕獲到的異常還是繼續拋出所捕獲的異常需要視具體情況處理

  除非你想把異常處理的責任交給調用者一般不用throws 比如你要讀入一些文件如果你想通知調用者讓調用者決定如何處理這個異常你就把這個異常throws給調用者如果你知道應該如何處理這個異常或者你想把異常馬上解決你可以就地catch她

  這完全取決於你想把異常自己立即處理還是想把處理責任返回給調用者取決於你的程序的結構和要求

  需要注意的有

  如果無法處理某個異常那就不要捕獲它

  如果捕獲了一個異常請不要胡亂處理它

  盡量在靠近異常被拋出的地方捕獲異常

  在捕獲異常的地方將它記錄到日志中除非您打算將它重新拋出

  按照您的異常處理必須多精細來構造您的方法

  需要用幾種類型的異常就用幾種尤其是對於應用程序異常

  三異常嵌套和捕獲適當的異常

  按照Java語言的定義所謂異常(Exception)指的就是向調用方法(calling method)表示發生非正常情況的習慣方式下面討論兩種在處理異常時可茲利用的技術異常嵌套和捕獲適當的異常

  異常嵌套

  你在試圖捕獲異常並打算扔出異常時該采取什麼措施呢?同時你希望原始的異常信息可用嗎?

  要回答以上的問題你不妨嘗試一下NestedException類具體的編程並不難唯一要做的無非是利用構造器並且重載printStackTrace()以便顯示出正確的數據

  此外你還應當考慮封裝Throwable而非Exception類來創建更具有重用性的組件之後你可以創建NestedRuntimeException變量封裝Throwable但無需對其進行聲明

  捕獲適當的異常

  正確地處理異常並不是一項輕松的任務這是因為異常的處理有時會導致程序出現其他不明行為不過以下三條規則可以幫助你避免錯誤處理異常所可能遭遇的風險

  規則 #: 總是捕獲扔出異常的類型而不要理睬異常的超類 為了遵守通常的代碼習慣你可以采用Exception類的大寫字母作為變量名如下所示

  catch(FileNotFoundException fnfe)

  以及

  catch(SQLException sqle)

  規則 # : 決不讓catch塊留空在很多情況下雖然確實編寫了try/catch塊但在代碼的catch部分卻什麼都沒有做或者如果采用了日志API(Logging API)那麼請編寫代碼把異常寫到日志中

  規則 # : 決不扔出Exception基類的實例開發人員應當總是扔出自己創建的異常類

  扔出異常的API很難處理在聲明方法扔出javalangException的情況下所有的問題都會強加在API用戶的頭上這樣他們就無法以一種專業的編程方式來處理異常通過為扔出API聲明Exception類的子類這一舉措API開發人員就可以減輕用戶的負擔

  以上提到的兩種技術在處理異常時還可能用得更好更適當嵌套技術令異常扔到另一異常的內部而捕獲適當的異常令程序調試大大簡化


From:http://tw.wingwit.com/Article/program/Java/hx/201311/26176.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.