關于exception error java基礎

1關于throwable

簡單介紹.png

參考上面的這個圖,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   請求的方法不存在

spring事務回滾與異常

一般情況下spring默認的是@Transation ,假如rollbackFor我們不指定默認的uncheckedException.會發(fā)生事務回滾。

但是如果rollbackFor指定了需要回滾的異常,比如自定義異常,那么回滾的時候只會混滾該類型的異常以及該異常子類的異常。所以使用時需要特別注意。

?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內(nèi)容