異常處理(006)_常見的Java異常有哪些(運行時)

1、常見的java運行時異常有哪些

瞭解運行時異常看這裏:什麼是java中的異常 
常見的非運行時異常看這裏:[常見的非運行時異常有哪些][3] 
[3]:

我們所說的java常見異常是指jdk或者其他常用第三方jar中,出現頻次很高的異常。常見的運行時異常(RuntimeException)包括: 
空指針異常類:NullPointerException 
數組下標越界異常:ArrayIndexOutOfBoundsException 
數組負長度異常:NegativeArraySizeException 
數組存儲異常:ArrayStoreException 
算術異常類:ArithmeticException

非法參數異常:IllegalArgumentException 
類型強制轉換異常:ClassCastException 
枚舉常量不存在異常:EnumConstantNotPresentException 
數字轉換異常:NumberFormatException 
無效的狀態異常:IllegalStateException

無效的監控狀態異常:IllegalMonitorStateException 
無效的線程狀態異常:IllegalThreadStateException

2、什麼情況下會拋出這些異常

如何拋出異常看這裏:如何拋出異常

  1. java.lang.NullPointerException 
    這個異常大家肯定都經常遇到,異常的解釋是:程序遇上了空指針。簡單地說就是調用了未經初始化的對象或者是不存在的對象。 
    這個錯誤經常出現在操作方法返回值、調用數組這些操作中等等。 
    一般在調用他人有可能返回null的方法時,對null進行了後續操作,會拋出該異常,這裏應該首先進行null判斷然後再進行後續操作。 
    對數組操作中出現空指針,很多情況下是一些剛開始學習編程的朋友常犯的錯誤,即把數組的初始化和數組元素的初始化混淆起來了。數組的初始化是對數組分配需要 的空間,而初始化後的數組,其中的元素並沒有實例化,依然是空的,所以還需要對每個元素都進行初始化(如果要調用的話)

  2. java.lang.ArrayIndexOutOfBoundsException 
    這個異常相信很多朋友也經常遇到過,異常的解釋是:數組下標越界(這裏的數組包括各類集合,如List等)。 
    現在程序中大多都有對數組的操作,因此在調用數組的時候一定要認真檢查,看調用的下標是不是超出了數組的範圍。再通過下標獲取數組值之前,最好先查看一下數組的length,以免出現這個異常。 
    另外,如果傳入的下標爲負數,也會出現這個異常。

  3. java.lang.NegativeArraySizeException 
    該異常的解釋是:數組長度爲負值異常。 
    當使用負數作爲數組長度創建數組時拋出該異常。 
    在創建數組之前,一定要確保數組長度非負,尤其是隱式創建(數組長度爲變量)。

  4. java.lang.ArrayStoreException 
    該異常的解釋是:數組存儲異常。 
    當向數組中存放非數組聲明類型對象時拋出。 
    在爲數組賦值時,一定要注意類型的一致。

  5. java.lang.ArithmeticException 
    該異常的解釋是:數學運算異常。 
    比如程序中出現了除以零這樣的運算就會出這樣的異常。對這種異常,大家只要好好檢查一下自己程序中涉及到數學運算的地方,就能夠解決。

  6. java.lang.IllegalArgumentException 
    該異常的解釋是:非法參數異常。 
    很 多java或者第三方類庫中的方法在某情況下都會引發這樣的錯誤。比如g.setcolor(int red,int green,int blue)這個方法中的三個值,如果有超過255的則會出現這個異常。一旦發現這個異常,我們要趕緊去檢查一下方法調用中的參數傳遞是不是出現了錯誤。

  7. java.lang.ClassCastException 
    該異常的解釋是:強制類型轉換異常。 
    假設有類A和B(A不是B的父類或子類),O是A的實例,那麼當強制將O構造爲類B的實例時拋出該異常。 
    一般會在類型強制轉換時出現,我們一定要梳理好繼承關係採取強轉即可避免。

  8. java.lang.EnumConstantNotPresentException 
    該異常的解釋是:枚舉常量不存在異常。 
    當應用試圖通過名稱和枚舉類型訪問一個枚舉對象,但該枚舉對象並不包含常量時,拋出該異常。 
    定義和使用枚舉類型時需要小心。

  9. java.lang.NumberFormatException 
    該異常的解釋是:數字轉換異常。該異常繼承於IllegalArgumentException。 
    當將字符串轉換爲數字時,若格式錯誤則轉換失敗,拋出該異常。例如將”abc”抓換爲整型即會拋出該異常。 
    我們在做數字轉換時一定要注意。

  10. java.lang.IllegalStateException 
    該異常的解釋是:無效的狀態異常。 
    當在Java環境和應用尚未處於某個方法的合法調用狀態,而調用了該方法時,拋出該異常。 
    例如在程序中兩次調用了response.sendRedirect()方法,就會拋出該異常。

  11. java.lang.IllegalMonitorStateException 
    該異常的解釋是:無效的監控狀態異常。 
    當某個線程試圖等待一個自己並不擁有的對象(O)的監控器或者通知其他線程等待該對象(O)的監控器時,拋出該異常。 
    異常的發生是由於程序員沒有注意notify(),notifyAll(),wait()方法的使用條件,沒有真正理解線程同步機制。如果當前的線程不是此對象鎖的所有者,卻調用該對象的notify(),notifyAll(),wait()方法時拋出該異常。

  12. java.lang.IllegalThreadStateException 
    該異常的解釋是:無效的線程狀態異常。該異常繼承於IllegalArgumentException。 
    當線程尚未處於某個方法的合法調用狀態,而調用了該方法時,拋出異常。 
    當對一個已經死亡的線程調用start,sleep之類的操作,會拋出該異常。

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