我所理解的JDK異常

1,什麼是異常
  Java程序在運行時出現的任何錯誤,均可以歸結爲異常。全部異常的父類是Throwable。Throwable在JDK中有兩個子類Error和Exception。Throwable有printStackTrace()等接口用於獲取堆棧跟蹤數據等信息數據庫

2,Error是什麼
  Error用來表示JVM在運行時出錯的比較嚴重的錯誤,開發人員對此類錯誤的發生時間是不可預知的,有些Error會致使JVM宕機,好比堆內存溢出;有些Error不會致使JVM宕機,好比棧內存溢出。   常見的Error有:StackOverFlowError和OutOfMemoryError。   StackOverflowError:當線程棧的深度超過虛擬機分配給線程的棧大小時就會出現此類錯誤。好比方法無限遞歸。   OutOfMemoryError:當虛擬機即便執行垃圾回收後也沒有更多的可用的內存用來分配一個對象時會發生此類錯誤,好比大對象實在沒法分配內存。數組

3,Exception是什麼
  Exception表示程序自己能夠處理的異常。Exception分爲運行期異常RuntimeException和非運行期異常。線程

4,什麼是非運行期異常
  非運行期異常是指在編譯器就能夠拋出可能發生的異常給程序調用者,由程序調用者來決定萬一發生異常的時候的處理。比較典型的有指針

  • ClassNotFoundException JVM找不到指定的類文件
  • FileNotFoundException JVM找不到指定的文件
  • IOException JVM與外邊發生IO操做時發生異常
  • SQLException JVM與SQL數據庫交互時發生異常

5,什麼是運行期異常
  RuntimeException是Exception的子類,表示因爲程序邏輯錯誤引發的異常,應該是須要改變程序邏輯而避免發生的。代碼中容許不捕獲。比較典型的有orm

  • ArrayIndexOutOfBoundsException 數組索引越界
  • ClassCastException 類型不匹配,兩者不是子父類關係
  • IllegalArgumentException 參數無效
  • IndexOutOfBoundsException 索引越界,好比list
  • NullPointException 空指針
  • NumberFormatException 字符串不是有效的數字

6,如何拋出與捕獲異常
  使用throw拋出異常。若是方法中出現了throw非運行期異常,則該方法上會有throws 該異常,交由該方法的調用者來處理該異常
  使用try-catch或 try-catch-finally 來捕獲異常。對象

  • try:可能會發生異常的代碼應該在try語句塊中運行。
  • catch:try語句中若是在運行時發生了異常,則進入catch語句中繼續執行。
  • finally:不管是否try中發生異常,finally都執行

7,異常鏈
  異常每次向上拋出以及向上類型轉換的時候,都會保存原始異常以及異常方法的調用,依次造成一條鏈,稱爲異常鏈。異常鏈的最頂端必然是主線程中的main()或者開發人員自定義的Thread線程的run()。遞歸

注意
1.try、catch、finally的組成爲:索引

  • try+catch
  • try+finally
  • try+catch+finally
  • try+catch...
  • try+catch...+finally

2.JDK1.7提供的try-with-resource語句的語法以下:
  try(可能異常){執行} 同時在方法中拋出該類異常;接口

3.重寫方法時,若是父類方法沒有拋出異常,子類也不能拋出該類異常,只能本身catch處理內存

下一篇文章詳細闡述一些我所理解的try-catch-finally在使用時的具體狀況。

相關文章
相關標籤/搜索