一、異常的繼承結構java
運行時異常(非受檢異常指的是java.lang.RuntimeException和java.lang.Error類及其子類)也稱爲未受檢異常、非受控異常,受檢異常又稱爲編譯時異常、受控異常。異常表示程序運行過程當中可能出現的非正常狀態,運行時異常表示虛擬機的一般操做中可能遇到的異常,是一種常見運行錯誤,只要程序設計得沒有問題一般就不會發生。受檢異常跟程序運行的上下文環境有關,即便程序設計無誤,仍然可能因使用的問題而引起。Java編譯器要求方法必須聲明拋出可能發生的受檢異常,可是並不要求必須聲明拋出未被捕獲的運行時異常。程序員
全部異常都是發生在運行階段,由於只有在運行階段才能new對象,異常的發生就是new異常對象。sql
編譯階段並不會發生異常,由於編譯時異常必須在編譯階段預先處理,若是不處理編譯器報錯,所以得名。數組
(1)運行時異常安全
Java.lang.ArrayStoreExcetpion Java.lang.ClassCastException Java.lang.EnumConstantNotPresentException Java.lang.IllegalArgumentException Java.lang.IllegalThreadStateException Java.lang.NumberFormatException 數字格式異常,如:將String轉換爲字符串的時候,String包含字母
Java.lang.IllegalMonitorStateException Java.lang.IllegalStateException 參數傳遞錯誤 Java.lang.IndexOutOfBoundsException 數組下標越界異常 Java.lang.ArrayIndexOutOfBoundsException Java.lang.StringIndexOutOfBoundsException Java.lang.NegativeArraySizeException’ Java.lang.NullPointerException 存在未經初始化的對象後者不存在的對象
ArithmeticException :當出現異常的運算條件時,拋出此異常(算術運算異常)
Java.lang.SecurityException Java.lang.TypeNotPresentException Java.lang.UnsupprotedOperationException
(2)編譯時異常:ide
Java.lang.ClassNotFoundException 指定的類不存在
Java.lang.CloneNotSupportedException
Java.lang.IllegalAccessException
Java.lang.InterruptedException
Java.lang.NoSuchFieldException
Java.lang.NoSuchMetodException 指定的方法不存在
SQLException 如:sql語句寫錯
二、編譯時異常和運行時異常的區別spa
(1)編譯時異常發生(對於發生機率較高的異常在運行以前須要進行預處理)的機率較運行時異常(機率較低,不必進行預處理)高,若是java沒有將異常進行劃分,那麼全部的異常都須要進行預處理,雖然程序更加安全,可是程序員的的工做量將大大增長設計
(2)編譯時異常與受檢異常的選用:orm
一直以來,關於在程序中究竟是該使用受檢異常仍是非受檢異常,開發者之間一直存在着爭議,畢竟兩類異常都各有優缺點。受檢異常的特色在於它強制要求開發人員在代碼中進行顯式的聲明和捕獲,不然就會產生編譯錯誤。這種限制從好的方面來講,能夠防止開發人員意外地忽略某些出錯的狀況,由於編譯器不容許出現未被處理的受檢異常;從很差的方面來講,受檢異常對程序中的設計提出了更高的要求。不恰當地使用受檢異常,會使代碼中充斥着大量沒有實際做用、只是爲了經過編譯而添加的代碼。而非受檢異常的特色是,若是不捕獲異常,不會產生編譯錯誤,異常會在運行時刻才被拋出。對象
非受檢異常的好處是能夠去掉一些不須要的異常處理代碼,而很差之處是開發人員可能忽略某些應該處理的異常。一個典型的例子是把字符串轉換成數字時會發生java.lang.NumberFormatException異常,忽略該異常可能致使一個錯誤的輸入就形成整個程序退出。
目前的主流意見是,最好優先使用非受檢異常。
(3)處理方式
受檢異常:JAVA編譯器強制要求咱們必需對出現的這些異常進行catch
運行時異常:是代碼的錯誤,咱們能夠不處理,當出現這樣的異常時,老是由虛擬機接管
爲何要使用異常機制?由於咱們要保證代碼在異常的狀況下依然可以執行下去,而不是意外退出
總結:
exception和error是java針對不一樣的異常的分類,Exception是程序運行的時候能夠捕獲而且進行相應處理的問題,而Error會致使程序直接崩潰沒法進行捕獲和相應的處理
Exception又能夠分爲可檢查異常和不可檢查異常,可檢查異常是隻須要顯式地進行捕獲和處理的,如Exception的實例,而不可檢查異常是不用顯式地進行捕獲和處理直接交給JVM處理,如RuntimeException異常和它的子類異常