2009-11-01 69 views

回答

17

如果你沒有,你每次訪問一個數組元素時都必須有try/catch塊,做了一個除法操作和許多其他的常見場景。

換一種方式,想象一下這個代碼:

Map map = ... 
int i = ... 
(int[])map.get("foo")[3] = 2334/i; 

必須檢查ClassCastExceptionArrayIndexOutofBoundsExceptionArithmeticExceptionUnsupportedOperationExceptionNullPointerException,就在我的頭頂。

與Java的問題不是未經檢查的例外。檢查異常是一個極具爭議的主題。有人說這主要是Java的一個實驗,實際上它們不起作用,但你會發現很多人認爲它們很好。

然而,沒有人認爲未檢查的異常是不好的。

+0

「沒有人認爲未經檢查的例外情況不好,但是」 - 你會感到驚訝:-)然而,在所有其他方面都是+1。 – ChssPly76 2009-11-01 04:32:25

+0

感謝@cletus。 – Moeb 2009-11-01 04:47:16

+6

事實上,如果運行時異常被檢查,它將很難處理異常,因爲幾乎你可以在catch塊中做的任何事情都可能導致新的運行時異常,而這又必須被處理... – 2009-11-01 09:48:40

1

這只是表示編譯器不會強制您查找異常,但您仍然可以在運行時將其拋出。作爲一個好處,這允許您從您的類中拋出新的異常,而無需更改接口,導致調用者更改其代碼。

8

Java中兩種異常(已選中和未選中)的想法是,檢查異常應該用於可合理預期會發生的錯誤狀況,而未檢查異常應該用於意外錯誤情況。

例如,如果找不到文件,您將得到FileNotFoundException,並且期望程序能夠處理這種情況是合理的。未經檢查的異常只應用於不應該發生的問題,並且這真的意味着如果發生這樣的問題,程序中存在一個錯誤。例如,NullPointerException意味着您的程序試圖取消引用null的變量,這很可能是一個錯誤。

Java編譯器強制程序員處理檢查的異常。這使編程語言更安全 - 這意味着程序員不得不考慮錯誤條件,這應該使程序更健壯。

編譯器不會檢查未經檢查的異常,因爲未經檢查的異常不應該發生,如果他們這樣做,那麼程序在運行時可以合理地執行任何操作;程序員必須解決這個錯誤。

在Java中這個功能一直受到一些批評,有些人甚至從Java調用了檢查異常a failed experiment和一些人propose to remove checked exceptions

+0

+1整潔的描述。 – Reuben 2011-08-09 09:52:54

相關問題