運行時異常與通常異常有何異同?

1、異常的概念

Java異常類層次結構圖:java

  

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

Error(錯誤):數組

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

Exception(異常):網絡

  是程序自己能夠處理的異常。測試

Exception能夠分爲checked exceptions和unchecked exceptions:spa

一、unchecked exceptions(運行時異常)都是RuntimeException類及其子類異常,就是咱們在開發中測試功能時程序終止,控制檯出現的異常,好比:.net

  • NullPointerException(空指針異常)、
  • IndexOutOfBoundsException(下標越界異常)
  • ClassCastException(類轉換異常)
  • ArrayStoreException(數據存儲異常,操做數組時類型不一致)
  • IO操做的BufferOverflowException異常

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

2、關於異常的題

一、運行時異常與通常異常有何異同?設計

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

  理解:

  運行時異常,咱們能夠不處理。當出現這樣的異常時,老是由虛擬機接管。好比:咱們歷來沒有人去處理過 NullPointerException 異常,它就是運行時異常,而且,這種異常仍是最多見的異常之一。RuntimeException 體系包括錯誤的類型轉換、數組越界訪問和試圖訪問空指針等等。處理 RuntimeException 的原則是:假如出現 RuntimeException,那麼必定是程序員的錯誤,例如,能夠經過檢查數組小標和數組邊界來避免越界訪問異常。

  通常異常:定義方法時必須聲明全部可能會拋出的checked exception;在調用這個方法時,必須捕獲它的checked exception,否則就得把它的exception傳遞下去;checked exception是從java.lang.Exception類衍生出來的。

二、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異常。

四、runtime exception舉例。

 1 ArithmeticException——因爲除數爲0引發的異常;  2 ArrayStoreException——因爲數組存儲空間不夠引發的異常;  3 ClassCastException—一當把一個對象歸爲某個類,但實際上此對象並非由這個類建立的,也不是其子類建立的,則會引發異常;  4 IllegalMonitorStateException——監控器狀態出錯引發的異常;  5 NegativeArraySizeException—一數組長度是負數,則產生異常;  6 NullPointerException—一程序試圖訪問一個空的數組中的元素或訪問空的對象中的 方法或變量時產生異常; OutofMemoryException——用new語句建立對象時,如系統沒法爲其分配內存空 間則產生異常;  7 SecurityException——因爲訪問了不該訪問的指針,使安全性出問題而引發異常;  8 IndexOutOfBoundsExcention——因爲數組下標越界或字符串訪問越界引發異常;  9 IOException——因爲文件未找到、未打開或者I/O操做不能進行而引發異常; 10 ClassNotFoundException——未找到指定名字的類或接口引發異常; 11 CloneNotSupportedException——一程序中的一個對象引用Object類的clone方法,但 此對象並無鏈接Cloneable接口,從而引發異常; 12 InterruptedException—一當一個線程處於等待狀態時,另外一個線程中斷此線程,從 而引發異常,有關線程的內容,將在下一章講述; 13 NoSuchMethodException一所調用的方法未找到,引發異常; 14 Illega1AccessExcePtion—一試圖訪問一個非public方法; 15 StringIndexOutOfBoundsException——訪問字符串序號越界,引發異常; 16 ArrayIdexOutOfBoundsException—一訪問數組元素下標越界,引發異常; 17 NumberFormatException——字符的UTF代碼數據格式有錯引發異常; 18 IllegalThreadException—一線程調用某個方法而所處狀態不適當,引發異常; 19 FileNotFoundException——未找到指定文件引發異常; 20 EOFException——未完成輸入操做即遇文件結束引發異常。

 

參考:http://www.javashuo.com/article/p-uwdyitlt-bq.html

相關文章
相關標籤/搜索