天天看點

java中異常介紹

一、異常概述 

  異常處理已經成為衡量一門語言是否成熟的标準之一,目前的主流程式設計語言如C++、C#、Ruby、Python等,大都提供了異常處理機制。增加了異常處理機制後的程式有更好的容錯性,更加健壯。

二、傳統錯誤處理的缺陷

  –無法窮舉所有異常情況:因為人類知識的限制,異常情況總比可以考慮到的情況多,總有“漏網之魚”的異常情況,是以程式總是不夠健壯。

  –錯誤處理代碼和業務實作代碼混雜:這種錯誤處理和業務實作混雜的代碼嚴重影響程式的可讀性,會增加程式維護的難度。

三、java的異常體系

java中異常介紹

四、異常資訊

所有異常對象都包含了如下幾個常用方法:

  –getMessage():傳回該異常的較長的描述字元串。

  –printStackTrace():将該異常的跟蹤棧資訊輸出到标準錯誤輸出。

  –printStackTrace(PrintStream s):将該異常的跟蹤棧資訊輸出到指定輸出流。

  –getStackTrace():傳回該異常的跟蹤棧資訊。 

五、finally

finally中的代碼一定會執行,是以可以使用finally回收資源。

  程式在try塊裡打開了一些實體資源(例如資料庫連接配接、網絡連接配接和磁盤檔案等),這些實體資源都必須顯式回收。 

  為了保證一定能回收try塊中打開的實體資源,異常處理機制提供了finally塊。不管try塊中的代碼是否出現異常,也不管哪一個catch塊被執行,finally塊總會被執行。 

注:Finally代碼塊隻有一種情況不會被執行。就是在之前執行了System.exit(0)。

六、多異常捕捉

在Java 7以前,每個catch塊隻能捕捉一個異常。但從Java 7開始,一個catch塊可以捕捉多個異常。

  多個異常之間用豎線隔開。

  多異常捕捉時,異常變量之前有隐式final修飾。

七、異常跟蹤棧

  異常對象的printStackTrace方法用于列印異常的跟蹤棧資訊,根據printStackTrace方法的輸出結果,我們可以找到異常的源頭,并跟蹤到異常一路觸發的過程。

  面向對象的應用程式運作時,經常會發生一系列方法調用,進而形成“方法調用棧”,異常的傳播則與相反:隻要異常沒有被完全捕獲(包括異常沒有被捕獲,或異常被處理後重新抛出了新異常),異常從發生異常的方法逐漸向外傳播,首先傳給該方法的調用者,該方法調用者再次創給其調用者……直至最後傳到 main方法,如果main方法依然沒有處理該異常,JVM會中止該程式,并列印異常的跟蹤棧資訊。

八、異常處理規則

  不要過度使用異常

  不要使用過于龐大的try塊

  避免使用Catch All語句

  不要忽略捕獲到異常