java中的異常和錯誤都繼承自java.lang.Throwable
這個類有兩個直接的子類Error和Exception。
這次主要記錄Exception的相關信息,在異常處理的時候,都會接觸到受檢異常(checked exception)和非受檢異常(unchecked exception)這兩種異常類型。非受檢異常指的是java.lang.RuntimeException和java.lang.Error類及其子類,所有其他的異常類都稱為受檢異常。兩種類型的異常在作用上並沒有差別,唯一的差別就在於使用受檢異常時的合法性要在編譯時刻由編譯器來檢查。正因為如此,受檢異常在使用的時候需要比非受檢異常更多的代碼來避免編譯錯誤。
RuntimeException
RuntimeException在默認情況下會得到自動處理。所以通常用不着捕獲RuntimeException,但在自己的封裝里,也許仍然要選擇拋出一部分RuntimeException。
RuntimeException
是那些可能在 Java 虛擬機正常運行期間拋出的異常的超類。可能在執行方法期間拋出但未被捕獲的RuntimeException
的任何子類都無需在throws
子句中進行聲明。(java api)
以下是uncheckedExcepiton。
Java.lang.ArithmeticException
Java.lang.ArrayStoreExcetpion
Java.lang.ClassCastException
Java.lang.EnumConstantNotPresentException
Java.lang.IllegalArgumentException
Java.lang.IllegalThreadStateException
Java.lang.NumberFormatException
Java.lang.IllegalMonitorStateException
Java.lang.IllegalStateException
Java.lang.IndexOutOfBoundsException
Java.lang.ArrayIndexOutOfBoundsException
Java.lang.StringIndexOutOfBoundsException
Java.lang.NegativeArraySizeException’
Java.lang.NullPointerException
Java.lang.SecurityException
Java.lang.TypeNotPresentException
Java.lang.UnsupprotedOperationException
CheckedException
除了runtimeException以外的異常,都屬於checkedException,它們都在java.lang庫內部定義。Java編譯器要求程序必須捕獲或聲明拋出這種異常。
一個方法必須通過throws語句在方法的聲明部分說明它可能拋出但並未捕獲的所有checkedException。
Java.lang.ClassNotFoundException
Java.lang.CloneNotSupportedException
Java.lang.IllegalAccessException
Java.lang.InterruptedException
Java.lang.NoSuchFieldException
Java.lang.NoSuchMetodException
一直以來,關於在程序中到底是該使用受檢異常還是非受檢
異常,開發者之間一直存在着爭議,畢竟兩類異常都各有優缺點。受檢異常的特點在於它強制要求開發人員在代碼中進行顯式的聲明和捕獲,否則就會產生編譯錯誤。這種限制從好的方面來說,可以防止開發人員意外地忽略某些出錯的情況,因為編譯器不允許出現未被處理的受檢異常;從不好的方面來說,受檢異常對程序中的設計提出了更高的要求。不恰當地使用受檢異常,會使代碼中充斥着大量沒有實際作用、只是為了通過編譯而添加的代碼。而非受檢異常的特點是,如果不捕獲異常,不會產生編譯錯誤,異常會在運行時刻才被拋出。
非受檢異常的好處是可以去掉一些不需要的異常處理代碼,而不好之處是開發人員可能忽略某些應該處理的異常。一個典型的例子是把字符串轉換成數字時會發生java.lang.NumberFormatException異常,忽略該異常可能導致一個錯誤的輸入就造成整個程序退出。
目前的主流意見是,最好優先使用非受檢異常。
轉自:http://blog.csdn.net/nlznlz/article/details/53271045