2009-08-11 26 views
24

據我所知,沒有辦法找到一個方法拋出哪些異常,而無需逐個查看API文檔。最常見的選中和未選中的Java異常?

自認爲是沒辦法,我想扭轉的研究和問你這是最常見的異常和RuntimeExceptions您遇到有問題時:

  • 鑄造
  • 陣列
  • 矢量,ArrayList中,HashMap的,等
  • IO(File類,流,過濾器,...)
  • 對象序列化
  • 線(wait()的,睡眠()等)
  • 或其他任何被認爲是「基本的Java」

我意識到,這可能是主觀的,枯燥的,但它是一類測試我真的不知道更好。

+1

對於檢查的異常來說不是真的,方法定義了它可能拋出的異常。對於所有其他人(比如NPE) - 他們沒有被選中是有原因的。 – Gandalf 2009-08-11 21:50:00

+0

您可以使用BCEL或ASM來解析二進制文件,並遍歷每種方法中的代碼以找到答案。 – 2009-08-12 04:00:28

回答

30

假設下面是java.lang除非我另有註明:

  • 鑄造:ClassCastException異常
  • 陣列:ArrayIndexOutOfBoundsException異常,NullPointerException異常
  • 集合:NullPointerExcep重刑,ClassCastException異常(如果你不使用自動裝箱,你搞砸了)
  • IO:產生java.io.IOException,java.io.FileNotFoundException,則java.io.EOFException的
  • 系列化:JAVA。 IO。ObjectStreamException(及其子類,我懶得一一列舉)
  • 主題:InterruptedException的,拋出:SecurityException,IllegalThreadStateException
  • 潛在的共同所有的情況:NullPointerException異常,拋出:IllegalArgumentException

你會最好查看Java站點的Package Summary頁面。這裏有一個:http://java.sun.com/j2se/1.4.2/docs/api/java/io/package-summary.html

+0

我從來沒有意識到,那裏確實有一個「例外總結」。謝謝! – 2009-08-11 22:01:02

+0

(編輯使例外清單可讀) 沒問題,我只是偶然發現了它。這是多麼偉大,「當一個人教學,兩個學習」,呃? 對不起,以前是一個小snippy,我會編輯,以解決這個問題。 – 2009-08-11 22:08:31

+0

嗨,剛剛嘗試過的鏈接發佈到包摘要,它不解決,有人知道新的位置? – Sizons 2015-06-07 14:53:19

15

NullPointerException異常

+2

也許最好的單詞回答。 – Azim 2017-01-01 20:44:53

1

經過異常是容易的,你的編輯器,當你將鼠標懸停/完成方法名應顯示的javadoc。

未檢查通常是實際的錯誤,甚至在javadocs中甚至沒有經常出現。我猜最常見的可能是IllegalArgumentException,任何具有任何可能的無效參數組合的方法都應該拋出它。

+0

如果他使用的是文本編輯器,則不會在方法名稱完成時顯示javadocs。 :-( – 2009-08-11 21:53:58

+0

我想你的意思是IllegalArgumentException。 – 2009-08-11 21:55:52

+4

不要使用文本編輯器(相信我,我做了幾十年)。就像讓你的自行車輪胎因爲需要更多運動而排出空氣 – 2009-08-11 22:35:07

1

如何尋找java.lang.Exception的子類,例如here

我個人使用2檢查了我自己TransientException的例外情況下,當一個重試可能會奏效。用於驗證錯誤的InvalidRequestException。

3

正如Bill K所說。檢查異常很容易。如果您的IDE /程序編輯器不能讓您快速查看方法javadoc或簽名,則需要將其丟棄。認真。

未經檢查的異常是不同的水壺。但我認爲最好的策略是不要試圖捕捉它們。相反,你寫你的代碼,以避免把它們放在第一位。例如;

// ... not sure if 'obj' is null 
if (obj != null) { 
    obj.someMethod(); 
} 
// ... not sure if 'obj' has the right type 
if (obj instanceof Foo) { 
    Foo foo = (Foo) obj; 
} 
// ... not sure if 'i' is in range 
if (i >= 0 && i < array.length) { 
    .... = array[i]; 
} 

這也是爲什麼我建議這樣的:

  • 的防護測試數量級的不是拋出和捕獲異常更爲有效。
  • 守衛測試更具可讀性......更少的代碼行。
  • 如果你發現一個未經檢查的異常,你永遠無法確定它是否發生了你認爲它的原因;例如:
 
    // obj might be null ... 
    try { 
     obj.doSomething(); 
    } catch (NullPointerException ex) { 
     System.err.println("obj was null"); // WRONG!!! 
     // the NPE could have happen inside doSomething() 
    } 
  • 如果未經檢查的異常是由錯誤造成的,你想一個堆棧跟蹤和(取決於應用程序),你可能不希望恢復。

很明顯,你只包括這些「守衛」檢查,你對代碼的理解告訴你他們是必要的!所以,舉例來說,如果你知道'obj'應該是非空的,'我'應該在範圍內,那麼離開檢查是一個好主意。如果你遺漏了太多的測試,你會得到一個異常......但這很好,因爲你可以使用堆棧跟蹤來弄清爲什麼你對代碼的理解是錯誤的,並且可能修復潛在的錯誤。

+0

非常全面的答案。 – 2009-08-12 14:22:04

7

java。郎鹹平:

  1. ArithmeticException
  2. ArrayIndexOutOfBoundsException異常
  3. ClassCastException異常
  4. ClassNotFoundException的
  5. CloneNotSupportedException的
  6. IllegalArgumentExcepion
  7. 拋出:IllegalMonitorStateException
  8. IllegalThreadStateExc主器件接收
  9. IndexOutOfBoundsException異常
  10. InterruptedException的
  11. NullPointerException異常
  12. NumberFormatedException

java.util中:

  1. ConcurrentModificationException的

java.io:

  1. EOFException類
  2. FileNotFoundException異常
  3. IOException異常
  4. NotSerializableException
0
  • 鑄造 - ClassCastException異常

  • 陣列 - ArrayIndexOutOfBoundsException異常

  • 載體,ArrayList中,HashMap的,等等 - 我很少看到有異常Java集合工作時,卻非常偶然ConcurrentModificationException的

  • IO(File類,流,過濾器,... ) - FileNotFoundException異常

  • 對象序列化 - ClassNotFoundException的

  • 線(wait()的,睡眠(),等) - 在我的經驗用通常,線程問題以隨機的方式表現出來,這些方式並不是特例。必須處理InterruptedException會佔用很多時間,但我沒有看到實際拋出的異常。

  • 或其他被認爲是「基本Java」的東西 - 迄今爲止,我的經驗中最常見的異常是NullPointerException。

11

未經檢查的例外列表
ArrayIndexOutOfBoundsException異常
ClassCastException異常
拋出:IllegalArgumentException
IllegalStateException異常
的NullPointerException
NumberFormatException的
的AssertionError
的ExceptionInInitializerError
的StackOverflowError
NoClassDefFoundError的

經過例外列表
異常
IOException的
FileNotFoundException異常
ParseException的
ClassNotFoundException的
CloneNotSupportedException的
InstantiationException
InterruptedException的
NoSuchMethodException
NoSuchFieldException