Error類和Exception類的父類都是throwable類,他們的區別是:
Error類一般是指與虛擬機相關的問題,如系統崩潰,虛擬機錯誤,內存空間不足,方法調用棧溢等。對于這類錯誤的導致的應用程序中斷,僅靠程序本身無法恢復和預防,遇到這樣的錯誤,建議讓程序終止。
Exception類表示程序可以處理的異常,可以捕獲且可能恢復。遇到這類異常,應該盡可能處理異常,使程序恢復運行,而不應該隨意終止異常。
Exception類又分為運行時異常(Runtime Exception)和受檢查的異常(Checked Exception ),運行時異常;ArithmaticException,IllegalArgumentException,編譯能通過,但是一運行就終止了,程序不會處理運行時異常,出現這類異常,程序會終止。而受檢查的異常,要么用try。。。catch捕獲,要么用throws字句聲明拋出,交給它的父類處理,否則編譯不會通過。
①.Exception(異常)是應用程序中可能的可預測、可恢復問題。一般大多數異常表示中度到輕度的問題。異常一般是在特定環境下產生的,通常出現在代碼的特定方法和操作中。在 EchoInput 類中,當試圖調用 readLine 方法時,可能出現 IOException 異常。
Exception 類有一個重要的子類 RuntimeException。RuntimeException 類及其子類表示“JVM 常用操作”引發的錯誤。例如,若試圖使用空值對象引用、除數為零或數組越界,則分別引發運行時異常(NullPointerException、ArithmeticException)和 ArrayIndexOutOfBoundException。
②.Error(錯誤)表示運行應用程序中較嚴重問題。大多數錯誤與代碼編寫者執行的操作無關,而表示代碼運行時 JVM(Java 虛擬機)出現的問題。例如,當 JVM 不再有繼續執行操作所需的內存資源時,將出現 OutOfMemoryError。
檢查異常 和 未檢查異常 的劃分
Java中的異常分為兩大類:
1.Checked Exception(非Runtime Exception)
2.Unchecked Exception(Runtime Exception)
運行時異常
RuntimeException類是Exception類的子類,它叫做運行時異常,Java中的所有運行時異常都會直接或者間接地繼承自RuntimeException類。
Java中凡是繼承自Exception,而不繼承自RuntimeException類的異常都是非運行時異常。
一個try后面可以跟多個catch,但不管多少個,最多只會有一個catch塊被執行。
對于非運行時異常(checked exception),必須要對其進行處理,否則無法通過編譯。
處理方式有兩種:
1.使用try..catch..finally進行捕獲;
2.在產生異常的方法聲明后面寫上throws 某一個Exception類型,如throws Exception,將異常拋出到外面一層去。
對于運行時異常(runtime exception),可以對其進行處理,也可以不處理。推薦不對運行時異常進行處理。
擴展:錯誤和異常的區別(Error vs Exception)
1).java.lang.Error: Throwable的子類,用于標記嚴重錯誤。合理的應用程序不應該去try/catch這種錯誤。絕大多數的錯誤都是非正常的,就根本不該出現的。
java.lang.Exception: Throwable的子類,用于指示一種合理的程序想去catch的條件。即它僅僅是一種程序運行條件,而非嚴重錯誤,并且鼓勵用戶程序去catch它。
**2).Error和RuntimeException **及其子類都是未檢查的異常(unchecked exceptions),而所有其他的Exception類都是檢查了的異常(checked exceptions).
checked exceptions: 通常是從一個可以恢復的程序中拋出來的,并且最好能夠從這種異常中使用程序恢復。比如FileNotFoundException, ParseException等。檢查了的異常發生在編譯階段,必須要使用try…catch(或者throws)否則編譯不通過。
**unchecked exceptions: **通常是如果一切正常的話本不該發生的異常,但是的確發生了。發生在運行期,具有不確定性,主要是由于程序的邏輯問題所引起的。比如ArrayIndexOutOfBoundException, ClassCastException等。從語言本身的角度講,程序不該去catch這類異常,雖然能夠從諸如RuntimeException這樣的異常中catch并恢復,但是并不鼓勵終端程序員這么做,因為完全沒要必要。因為這類錯誤本身就是bug,應該被修復,出現此類錯誤時程序就應該立即停止執行。 因此,面對Errors和unchecked exceptions應該讓程序自動終止執行,程序員不該做諸如try/catch這樣的事情,而是應該查明原因,修改代碼邏輯。
RuntimeException:RuntimeException體系包括錯誤的類型轉換、數組越界訪問和試圖訪問空指針等等。
處理RuntimeException的原則是:如果出現 RuntimeException,那么一定是程序員的錯誤。例如,可以通過檢查數組下標和數組邊界來避免數組越界訪問異常。其他(IOException等等)checked異常一般是外部錯誤,例如試圖從文件尾后讀取數據等,這并不是程序本身的錯誤,而是在應用環境中出現的外部錯誤。
以上這篇Java_異常類(錯誤和異常,兩者的區別介紹) 就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
常見的異常;
ArrayIndexOutOfBoundsException 數組下標越界異常,
ArithmaticException 算數異常 如除數為零
NullPointerException 空指針異常
IllegalArgumentException 不合法參數異常