1關于throwable

參考上面的這個圖,throwable是父類,包括error和exception,
錯誤: Error類以及它的子類的實例,代表了JVM本身的錯誤。錯誤不能被程序員通過代碼處理,Error很少出現(xiàn)。因此,程序員應該關注Exception為父類的分支下的各種異常類。
異常: Exception以及它的子類,代表程序運行時發(fā)送的各種不期望發(fā)生的事件??梢员籎ava異常處理機制使用,是異常處理的核心。
但是javac,也就是在編譯階段能夠被檢測出來的,叫檢查性異常(checked exception).那另外一種叫unchecked exception.
Error 和 RuntimeException 以及子類。javac在編譯時,不會提示和發(fā)現(xiàn)這樣的異常,我們可以編寫代碼處理(使用try…catch…finally)這樣的異常,也可以不處理。對于這些異常,我們應該修正代碼,而不是去通過異常處理器處理 。這樣的異常發(fā)生的原因多半是代碼寫的有問題。如除0錯誤ArithmeticException,錯誤的強制類型轉(zhuǎn)換錯誤ClassCastException,數(shù)組索引越界ArrayIndexOutOfBoundsException,使用了空對象NullPointerException等等。
Java 根據(jù)各個類庫也定義了一些其他的異常,下面的表中列出了 Java 的非檢查性異常。
異常 描述
非檢查性異常(unckecked exception):
- ArithmeticException 當出現(xiàn)異常的運算條件時,拋出此異常。例如,一個整數(shù)"除以零"時,拋出此類的一個實例。
- ArrayIndexOutOfBoundsException 用非法索引訪問數(shù)組時拋出的異常。如果索引為負或大于等于數(shù)組大小,則該索引為非法索引。
- ArrayStoreException 試圖將錯誤類型的對象存儲到一個對象數(shù)組時拋出的異常。
- ClassCastException 當試圖將對象強制轉(zhuǎn)換為不是實例的子類時,拋出該異常。
- IllegalArgumentException 拋出的異常表明向方法傳遞了一個不合法或不正確的參數(shù)。
- IllegalMonitorStateException 拋出的異常表明某一線程已經(jīng)試圖等待對象的監(jiān)視器,或者試圖通知其他正在等待對象的監(jiān)視器而本身沒有指定監(jiān)視器的線程。
- IllegalStateException 在非法或不適當?shù)臅r間調(diào)用方法時產(chǎn)生的信號。換句話說,即 Java 環(huán)境或 Java 應用程序沒有處于請求操作所要求的適當狀態(tài)下。
- IllegalThreadStateException 線程沒有處于請求操作所要求的適當狀態(tài)時拋出的異常。
- IndexOutOfBoundsException 指示某排序索引(例如對數(shù)組、字符串或向量的排序)超出范圍時拋出。
- NegativeArraySizeException 如果應用程序試圖創(chuàng)建大小為負的數(shù)組,則拋出該異常。
- NullPointerException 當應用程序試圖在需要對象的地方使用 null 時,拋出該異常
- NumberFormatException 當應用程序試圖將字符串轉(zhuǎn)換成一種數(shù)值類型,但該字符串不能轉(zhuǎn)換為適當格式時,拋出該異常。
- SecurityException 由安全管理器拋出的異常,指示存在安全侵犯。
- StringIndexOutOfBoundsException 此異常由 String 方法拋出,指示索引或者為負,或者超出字符串的大小。
- UnsupportedOperationException 當不支持請求的操作時,拋出該異常。
檢查性異常(checked exception):
除了Error 和 RuntimeException的其它異常。javac強制要求程序員為這樣的異常做預備處理工作(使用try…catch…finally或者throws)。在方法中要么用try-catch語句捕獲它并處理,要么用throws子句聲明拋出它,否則編譯不會通過。這樣的異常一般是由程序的運行環(huán)境導致的。因為程序可能被運行在各種未知的環(huán)境下,而程序員無法干預用戶如何使用他編寫的程序,于是程序員就應該為這樣的異常時刻準備著。如SQLException , IOException,ClassNotFoundException 等。
下面的表中列出了 Java 定義在 java.lang 包中的檢查性異常類。
ClassNotFoundException 應用程序試圖加載類時,找不到相應的類,拋出該異常。
CloneNotSupportedException 當調(diào)用 Object 類中的 clone 方法克隆對象,但該對象的類無法實現(xiàn) Cloneable 接口時,拋出該異常。
IllegalAccessException 拒絕訪問一個類的時候,拋出該異常。
InstantiationException 當試圖使用 Class 類中的 newInstance 方法創(chuàng)建一個類的實例,而指定的類對象因為是一個接口或是一個抽象類而無法實例化時,拋出該異常。
InterruptedException 一個線程被另一個線程中斷,拋出該異常。
NoSuchFieldException 請求的變量不存在
NoSuchMethodException 請求的方法不存在