Error異常html
Error表示程序在運行期間出現了十分嚴重、不可恢復的錯誤,在這種狀況下應用程序只能停止運行,例如JAVA 虛擬機出現錯誤。Error是一種unchecked Exception,編譯器不會檢查Error是否被處理,在程序中不用捕獲Error類型的異常。通常狀況下,在程序中也不該該拋出Error類型的異常。程序員
RuntimeException異常數據庫
Exception異常包括RuntimeException異常和其餘非RuntimeException的異常。RuntimeException 是一種Unchecked Exception,即表示編譯器不會檢查程序是否對RuntimeException做了處理,在程序中沒必要捕獲RuntimException類型的異常,也沒必要在方法體聲明拋出RuntimeException類。RuntimeException發生的時候,表示程序中出現了編程錯誤,因此應該找出錯誤修改程序,而不是去捕獲RuntimeException。編程
Checked Exception異常函數
Checked Exception異常,這也是在編程中使用最多的Exception,全部繼承自Exception而且不是RuntimeException的異常都是checked Exception,上圖中的IOException和ClassNotFoundException。JAVA 語言規定必須對checked Exception做處理,編譯器會對此做檢查,要麼在方法體中聲明拋出checked Exception,要麼使用catch語句捕獲checked Exception進行處理,否則不能經過編譯。spa
爲何要在聲明方法拋出異常?設計
方法是否拋出異常與方法返回值的類型同樣重要。假設方法拋出異常卻沒有聲明該方法將拋出異常,那麼客戶程序員能夠調用這個方法並且不用編寫處理異常的代碼。那麼,一旦出現異常,那麼這個異常就沒有合適的異常控制器來解決。code
爲何拋出的異常必定是已檢查異常?RuntimeException與Error能夠在任何代碼中產生,它們不須要由程序員顯示的拋出,一旦出現錯誤,那麼相應的異常會被自動拋出。遇到Error,程序員通常是無能爲力的;遇到RuntimeException,那麼必定是程序存在邏輯錯誤,要對程序進行修改;只有已檢查異常纔是程序員所關心的,程序應該且僅應該拋出或處理已檢查異常。而已檢查異常是由程序員拋出的,這分爲兩種狀況:客戶程序員調用會拋出異常的庫函數;客戶程序員本身使用throw語句拋出異常。htm
注意:覆蓋父類某方法的子類方法不能拋出比父類方法更多的異常,因此,有時設計父類的方法時會聲明拋出異常,但實際的實現方法的代碼卻並不拋出異常,這樣作的目的就是爲了方便子類方法覆蓋父類方法時能夠拋出異常。對象
使用finally塊釋放資源
finally關鍵字保證不管程序使用任何方式離開try塊,finally中的語句都會被執行。在如下三種狀況下會進入finally塊:
(1) try塊中的代碼正常執行完畢。
(2) 在try塊中拋出異常。
(3) 在try塊中執行return、break、continue。
所以,當你須要一個地方來執行在任何狀況下都必須執行的代碼時,就能夠將這些代碼放入finally塊中。當你的程序中使用了外界資源,如數據庫鏈接,文件等,必須將釋放這些資源的代碼寫入finally塊中。
必須注意的是:在finally塊中不能拋出異常。JAVA異常處理機制保證不管在任何狀況下必須先執行finally塊而後再離開try塊,所以在try塊中發生異常的時候,JAVA虛擬機先轉到finally塊執行finally塊中的代碼,finally塊執行完畢後,再向外拋出異常。若是在finally塊中拋出異常,try塊捕捉的異常就不能拋出,外部捕捉到的異常就是finally塊中的異常信息,而try塊中發生的真正的異常堆棧信息則丟失了。
異常處理要害字
Java的異常處理是經過5個要害字來實現的:try,catch,throw,throws,finally。JB的在線幫助中對這幾個要害字是這樣解釋的:
Throws: Lists the exceptions a method could throw.
Throw: Transfers control of the method to the exception handler.
Try: Opening exception-handling statement.
Catch: Captures the exception.
Finally: Runs its code before terminating the program.
try語句
try語句用大括號{}指定了一段代碼,該段代碼可能會拋棄一個或多個例外。
catch語句
catch語句的參數相似於方法的聲明,包括一個例外類型和一個例外對象。例外類型必須爲Throwable類的子類,它指明瞭catch語句所處理的例外類型,例外對象則由運行時系統在try所指定的代碼塊中生成並被捕捉,大括號中包含對象的處理,其中能夠調用對象的方法。
catch語句能夠有多個,分別處理不一樣類的例外。Java運行時系統從上到下分別對每一個catch語句處理的例外類型進行檢測,直到找到類型相匹配的catch語句爲止。這裏,類型匹配指catch所處理的例外類型與生成的例外對象的類型徹底一致或者是它的父類,所以,catch語句的排列順序應該是從非凡到通常。
也能夠用一個catch語句處理多個例外類型,這時它的例外類型參數應該是這多個例外類型的父類,程序設計中要根據具體的狀況來選擇catch語句的例外處理類型。
finally語句
try所限定的代碼中,當拋棄一個例外時,其後的代碼不會被執行。經過finally語句能夠指定一塊代碼。不管try所指定的程序塊中拋棄或不拋棄例外,也不管catch語句的例外類型是否與所拋棄的例外的類型一致,finally所指定的代碼都要被執行,它提供了統一的出口。一般在finally語句中能夠進行資源的清除工做。如關閉打開的文件等。
throws語句
throws老是出如今一個函數頭中,用來標明該成員函數可能拋出的各類異常。對大多數Exception子類來講,Java 編譯器會強迫你聲明在一個成員函數中拋出的異常的類型。假如異常的類型是Error或 RuntimeException, 或它們的子類,這個規則不起做用, 由於這在程序的正常部分中是不期待出現的。 假如你想明確地拋出一個RuntimeException,你必須用throws語句來聲明它的類型。
throw語句 throw老是出如今函數體中,用來拋出一個異常。程序會在throw語句後當即終止,它後面的語句執行不到,而後在包含它的全部try塊中(可能在上層調用函數中)從裏向外尋找含有與其匹配的catch子句的try塊。 資料引用:http://www.knowsky.com/365353.html