2011-04-28 59 views

回答

133

一個錯誤「表示嚴重問題 合理的應用程序應該 不要試圖趕上。」

了異常 「表示條件 合理的應用程序可能 想趕上。」

Error隨RuntimeException &其子類unchecked例外。所有其他異常類別都是checked例外。

檢查例外通常是程序可以從中恢復的那些&以編程方式從這些例外中恢復可能是一個好主意。例子包括FileNotFoundExceptionParseException等程序員,預計通過使用try-catch塊來檢查這些異常或扔回去給調用者

在另一方面,我們有選中例外。這些都是那些如果一切順利都不會發生的例外,但它們確實發生了。示例包括ArrayIndexOutOfBoundExceptionClassCastException等。許多應用程序將使用try-catchthrows子句爲RuntimeExceptions &其子類,但從語言角度來看,它不需要這樣做。請注意,從RuntimeException恢復通常是可能的,但設計類/異常的人認爲最終程序員沒有必要檢查這些異常。

錯誤也未經檢查異常&程序員不需要對這些做任何事情。實際上,對於錯誤使用try-catch子句是一個壞主意。大多數情況下,從錯誤中恢復是不可能的。&程序應該被允許終止。例子包括OutOfMemoryErrorStackOverflowError

請注意,雖然錯誤是未經檢查的異常,我們不應該試圖對付他們,但它是確定以應對代碼RuntimeExceptions(也unchecked異常)。檢查的異常應該由代碼處理。

+7

'RuntimeException'S通常是由不良編程引起的。 – wulfgarpro 2012-09-09 08:46:47

+5

恰恰相反,wulfgar,我的經驗告訴我,RuntimeException是用戶輸入無效的結果。 – corsiKa 2015-04-19 04:45:35

+9

@corsiKa無效的用戶輸入應該由程序員檢查。 – mochomecha 2016-05-25 08:19:37

4

一般而言,錯誤是指任何人都無法控制或猜測它何時發生.Exception可以被猜測並且可以被處理。 Java中的異常和錯誤是Throwable的子類,它是基於程序控制進行區分的。例如OutOfMemory Error等錯誤,程序員無法猜測並且可以處理它。它依賴於基於結構,操作系統和服務器配置的動態.Where因爲Exception程序員可以處理它,並且可以避免應用程序的錯誤行爲。例如,如果您的代碼正在查找不可用的文件,則拋出IOException。此類實例程序員可以猜測並處理它。

11

錯誤是大多數情況下你無法處理的東西。

例外是爲了給你一個機會去做一些事情。就像嘗試別的東西或寫入日誌。

try{ 
    //connect to database 1 
} 
catch(DatabaseConnctionException err){ 
    //connect to database 2 
    //write the err to log 
} 
15

ErrorException都擴展Throwable,但大多Error由JVM中的場景是致命的,是沒有辦法的應用程序,以從錯誤中恢復拋出。例如OutOfMemoryError

雖然即使應用程序也可以引發Error,但它不是一個好習慣,相反,應用程序應該使用檢查的異常來處理可恢復的條件,並使用運行時異常來處理編程錯誤。

+0

我可能有一個例子,你可能想嘗試從'Error'(例如'OutOfMemoryError')恢復。假設你有一個移動應用程序,並且你想放置一張背景圖片。在某些舊的或較低的內存設備上,這可能是不可能的(應用程序本身沒有留下內存)。所以有兩個選項你會檢查它是否可能每次你想顯示這樣的圖片,或者你只是試圖顯示它,如果它會失敗,你趕上'OutOfMemoryError'並繼續沒有它。 – 2015-12-11 07:08:42