在Java中堕绩,Exception和Error都是Throwable的子類策幼,不同之處在于它們的嚴重性和程序員處理它們的方式不同。
異常是程序運行中發(fā)生的事件奴紧,它們可以被程序員預見并且被捕獲處理垄惧,而錯誤通常指出存在于應用程序以外的嚴重問題,例如系統(tǒng)崩潰绰寞、虛擬機錯誤,它們通常是程序員無法預料和控制的铣口,是無法處理的滤钱。
Exception(異常):
通常由程序的某些操作引發(fā),比如用戶輸入錯誤脑题、文件不存在等件缸。
應用程序應該捕獲并適當處理。
分為兩類:Checked Exception(受檢異常)叔遂,如IOException他炊,必須顯式捕獲或在方法簽名中聲明;就是編譯器要求你必須處置的異常已艰。不知道你編程的時候有沒有遇到過痊末,你寫的某段代碼,編譯器要求你必須要對這段代碼try…catch哩掺,或者throws exception凿叠,如果你遇見過,沒錯,這就是檢查異常盒件,也就是說蹬碧,你代碼還沒運行呢,編譯器就會檢查你的代碼炒刁,會不會出現(xiàn)異常恩沽,要求你對可能出現(xiàn)的異常必須做出相應的處理。Unchecked Exception(未檢異常)翔始,如NullPointerException和IndexOutOfBoundsException罗心,通常是程序邏輯錯誤,無法預見绽昏,只能在運行時才能檢查出來协屡,比如空指針,通過更改代碼來避免全谤。
Error(錯誤):
通常表明嚴重的問題肤晓,如虛擬機運行錯誤(VirtualMachineError)、OutOfMemoryError或StackOverflowError认然、NoClassDefFoundError补憾,這些錯誤通常不允許程序捕獲,程序員也幾乎無法進行處理卷员。且通常表示程序無法正常繼續(xù)執(zhí)行盈匾。
應用程序不應該嘗試捕獲錯誤,通常是致命的毕骡,應該避免發(fā)生削饵。
處理方式:
對于Exception,編寫異常處理代碼(try-catch-finally塊)來優(yōu)雅地處理可能發(fā)生的情況未巫。
對于Error窿撬,通常建議讓程序終止,并根據(jù)錯誤的類型對系統(tǒng)進行調(diào)整叙凡,修復導致錯誤的根本原因劈伴。