用異常來處理錯誤。捕獲異常最佳的時候應(yīng)該是程序編譯的時候,也就是程序運行之前,但是不是所有的錯誤都能在編譯的時候被發(fā)現(xiàn),有些問題只有到程序運行的時候才能被處理,他們要通過某種方式,讓引發(fā)問題的代碼將適當?shù)男畔鹘o那些知道該怎么處理這些問題的程序。
基本異常 異常條件是一種能阻止正在運行的方法或其某一部分繼續(xù)運行下去的問題。 把異常條件同普通問題區(qū)分開來,這點很重要,遇到普通問題的時候,你在 當前的運行環(huán)境下有足夠的信息來處理這個困難,對于異常條件,由于你得不到 足夠得用以處理這個問題得信息,因此不能在當前得運行環(huán)境下繼續(xù)運行下去, 你只能跳出當前得運行環(huán)境,并且把問題交到上層得運行環(huán)境,這就是拋出異常的 時候所發(fā)生的事情。
當你拋出異常對象的時候,首先會象創(chuàng)建其他java對象那樣,創(chuàng)建一個異常對象, 在堆里,用new ,然后停下當前的執(zhí)行路徑,再將異常對象的reference從當前的運行 環(huán)境中彈出去,現(xiàn)在異常處理機制開始接管程序了, 創(chuàng)建自己的異常
異常說明
異常說明屬于方法聲明的一部分,要列在參數(shù)表的后面。 異常說明要用throws關(guān)鍵詞語,后面跟上所有可能拋出異常類型的清單。
捕捉任意類型的異常
要想創(chuàng)建一個“能處理任意類型異常的”異常處理程序是完全可能的,要做到這點, 你就必須去捕捉異常的基類Exception,
由于Exception只是那些跟程序員有關(guān)的異常類的基類,因此你不能從它那里得到更多的 關(guān)于異常的具體信息,不過你也可以調(diào)用Exception的基類Throwable的方法,
String getMessage()
String getLocalizedMessage()
String toString()
void printStackTrace() void printStackTrace(PrintStream) void printStackTrace(java.io.PrintWriter)
Throwable fillInStackTrace()
用finally進行清理
你會時常碰到”無論try區(qū)塊有沒有拋出異常“,程序都必須執(zhí)行的代碼。一般來說 這些代碼都是執(zhí)行恢復內(nèi)存之外的操作的(因為恢復內(nèi)存是垃圾回收器的活) 當你需要把內(nèi)存以外的東西恢復到原先狀態(tài)的時候finally就顯得必要了。