1. 程式人生 > >Java中的異常

Java中的異常

執行 代碼塊 結束運行 提示 包含 用戶輸入 控制 語句 自定義

  作為程序開發人員,我們必然都見過代碼運行後拋出的異常。初學者見到程序運行後沒有出現預期的結果,而是出現了看都看不懂的異常提示,心都要碎了。編程人員中流傳著一句話,沒有無異常的代碼。雖然說得比較絕對,但是足以見到異常在代碼開發過程中,異常,是多麽得常見。

  當然,遇到問題去解決才是我們應有的態度,如果退縮了的話,就真的是“Java從入門到放棄”了。

  在Java中,異常是一種程序運行中產生的對象,它們也有各種類來加以區分,也有各自的屬性行為。我們在控制臺看到的紅色字體的描述,就是異對象調用它自己的方法描述的它發生的位置,異常的類型。異常對象產生之後,需要拋出,才能夠被java虛擬機所識別。這點尤其是在我們自定義異常的時候需要註意!

  異常傳播機制:若程序運行過程中,某個被調用的方法產生了異常並且他自己沒有處理,那麽他將會將這個異常拋給調用它的方法,並跳出方法調用棧,如果調用它的方法還是沒有處理,那麽異常仍會繼續拋出給調用它的方法,該方法也跳出方法調用棧,若一直到main方法還未解決,main方法會講異常拋給java虛擬機,並跳出方法調用棧,java虛擬機沒有解決異常的能力,程序結束運行。註意,方法跳出調用棧之前,若某些代碼已經運行,那麽該代碼運行的結果不會消失。

  那麽問題來了,若某一個方法有可能產生異常,我們如何處理?

  首先,我們要盡量避免異常的出現,比如在輸入時,限制用戶輸入的範圍,並且對所有可能的輸入情況進行判斷,對不同的輸入情況進行處理等;

  其次,我們可以使用try-catch-finally代碼塊來處理異常,try{}所包含的代碼即有可能出現異常的語句塊,又稱為受保護的代碼,catch(){}中,圓括號為需要不捕獲的異常類型名以及異常對象名,花括號中為我們的處理語句,若捕獲了滿足圓括號中的異常,無論花括號中有無額外代碼,都將認為該異常已被解決,程序會繼續運行,finally{}中為無論是否捕獲異常都會強制執行的代碼,若try{}塊中有,break/return等,也會先執行finally中的語句才結束,即只要進入try代碼塊,若有finallly則其必將被執行。

  再者,只有讓方法有可能產生異常,他自己不能夠解決,那麽它就拋出異常給調用者。但是任由方法運行時拋異常對於開發者而言往往是被動的,尤其是代碼將可能被其他人閱讀和改寫的時候,他人很難考慮到所有可能跑一場的情況。這個時候,throws關鍵字出現了,它用在方法的申明中,在方法名以及其圓括號後加上throws關鍵字 再加上拋出的異常類型名,這樣就完整地表示了一個方法可能拋出的異常。這種情況下,方調用者必須使用try-catch語句塊來處理或者再次使用throws來申明拋出異常。以此類推。此處需要註意,調用者再申明的異常類型只能是被調用者拋出的相同異常類型或者其父類,否則編譯將會報出錯誤。以上時編譯期異常的申明方法,而對於運行期異常,若調用者沒有再申明編譯也不會出錯,但是,作為開發人員,我們也應該加深個申明或者使用try-catch去處理。

  以上就是我對java中異常的認識,和處理方法,還有細節將在以後補充。

  

  

  

Java中的異常