運行時異常和非運行時異常區別

一,異常的概念

Java異常類層次結構圖:

Throwable: 有兩個重要的子類:Exception(異常)和 Error(錯誤),二者都是 Java 異常處理的重要子類,各自都包含大量子類。

Error(錯誤):是程序無法處理的錯誤,表示運行應用程序中較嚴重問題。大多數錯誤與代碼編寫者執行的操作無關,而表示代碼運行時 JVM(Java 虛擬機)出現的問題。例如,Java虛擬機運行錯誤(Virtual MachineError),當 JVM 不再有繼續執行操作所需的內存資源時,將出現 OutOfMemoryError。這些異常發生時,Java虛擬機(JVM)一般會選擇線程終止。

Exception(異常):是程序本身可以處理的異常。

Exception可以分爲checked exceptions和unchecked exceptions

1,unchecked exceptions(運行時異常)都是RuntimeException類及其子類異常,就是我們在開發中測試功能時程序終止,控制檯出現的異常,比如:
NullPointerException(空指針異常)、
IndexOutOfBoundsException(下標越界異常)
ClassCastException(類轉換異常)
ArrayStoreException(數據存儲異常,操作數組時類型不一致)
IO操作的BufferOverflowException異常

2, checked exceptions,非運行時異常 (編譯異常):是RuntimeException以外的異常,類型上都屬於Exception類及其子類。從程序語法角度講是必須進行處理的異常,如果不處理,程序就不能編譯通過。如IOException、SQLException等以及用戶自定義的Exception異常,一般情況下不自定義檢查異常。
通俗的話說就是在寫代碼時出現紅線,需要try catch或者throws時出現的異常。

二,關於異常的題

1,運行時異常與一般異常有何異同?

異常表示程序運行過程中可能出現的非正常狀態,運行時異常表示虛擬機的通常操作中可能遇到的異常,是一種常見運行錯誤。java編譯器要求方法必須聲明拋出可能發生的非運行時異常,但是並不要求必須聲明拋出未被捕獲的運行時異常。

2,error和exception有什麼區別?

error 表示恢復不是不可能但很困難的情況下的一種嚴重問題。比如說內存溢出。不可能指望程序能處理這樣的情況。 exception 表示一種設計或實現問題。也就是說,它表示如果程序運行正常,從不會發生的情況。

3,Java中的異常處理機制的簡單原理和應用。

異常是指java程序運行時(非編譯)所發生的非正常情況或錯誤,與現實生活中的事件很相似,現實生活中的事件可以包含事件發生的時間、地點、人物、情節等信息,可以用一個對象來表示,Java使用面向對象的方式來處理異常,它把程序中發生的每個異常也都分別封裝到一個對象來表示的,該對象中包含有異常的信息。
Java對異常進行了分類,不同類型的異常分別用不同的Java類表示,所有異常的根類爲java.lang.Throwable,Throwable下面又派生了兩個子類:Error和Exception,Error 表示應用程序本身無法克服和恢復的一種嚴重問題,程序只有死的份了,例如,說內存溢出和線程死鎖等系統問題。Exception表示程序還能夠克服和恢復的問題,其中又分爲系統異常和普通異常,系統異常是軟件本身缺陷所導致的問題,也就是軟件開發人員考慮不周所導致的問題,軟件使用者無法克服和恢復這種問題,但在這種問題下還可以讓軟件系統繼續運行或者讓軟件死掉,例如,數組腳本越界(ArrayIndexOutOfBoundsException),空指針異常(NullPointerException)、類轉換異常(ClassCastException);普通異常是運行環境的變化或異常所導致的問題,是用戶能夠克服的問題,例如,網絡斷線,硬盤空間不夠,發生這樣的異常後,程序不應該死掉。
java爲系統異常和普通異常提供了不同的解決方案,編譯器強制普通異常必須try..catch處理或用throws聲明繼續拋給上層調用方法處理,所以普通異常也稱爲checked異常,而系統異常可以處理也可以不處理,所以,編譯器不強制用try..catch處理或用throws聲明,所以系統異常也稱爲unchecked異常。

提示答題者:就按照三個級別去思考:虛擬機必須宕機的錯誤,程序可以死掉也可以不死掉的錯誤,程序不應該死掉的錯誤;

4,請寫出你最常見到的5個runtime exception。

  1. ArithmeticException——由於除數爲0引起的異常;

  2. ArrayStoreException——由於數組存儲空間不夠引起的異常;

  3. ClassCastException—一當把一個對象歸爲某個類,但實際上此對象並不是由這個類 創建的,也不是其子類創建的,則會引起異常;

  4. IllegalMonitorStateException——監控器狀態出錯引起的異常;

  5. NegativeArraySizeException—一數組長度是負數,則產生異常;

  6. NullPointerException—一程序試圖訪問一個空的數組中的元素或訪問空的對象中的 方法或變量時產生異常;

  7. OutofMemoryException——用new語句創建對象時,如系統無法爲其分配內存空 間則產生異常;

  8. SecurityException——由於訪問了不應訪問的指針,使安全性出問題而引起異常;

  9. IndexOutOfBoundsExcention——由於數組下標越界或字符串訪問越界引起異常;

  10. IOException——由於文件未找到、未打開或者I/O操作不能進行而引起異常;

  11. ClassNotFoundException——未找到指定名字的類或接口引起異常;

  12. CloneNotSupportedException——一程序中的一個對象引用Object類的clone方法,但 此對象並沒有連接Cloneable接口,從而引起異常;

  13. InterruptedException—一當一個線程處於等待狀態時,另一個線程中斷此線程,從 而引起異常,有關線程的內容,將在下一章講述;

  14. NoSuchMethodException一所調用的方法未找到,引起異常;

  15. Illega1AccessExcePtion—一試圖訪問一個非public方法;

  16. StringIndexOutOfBoundsException——訪問字符串序號越界,引起異常;

  17. ArrayIdexOutOfBoundsException—一訪問數組元素下標越界,引起異常;

  18. NumberFormatException——字符的UTF代碼數據格式有錯引起異常;

  19. IllegalThreadException—一線程調用某個方法而所處狀態不適當,引起異常;

  20. FileNotFoundException——未找到指定文件引起異常;

  21. EOFException——未完成輸入操作即遇文件結束引起異常。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章