Error類和Exception類的父類都是throwable類,他們的區(qū)別是:
Error類一般是指與虛擬機(jī)相關(guān)的問(wèn)題,如系統(tǒng)崩潰,虛擬機(jī)錯(cuò)誤,內(nèi)存空間不足,方法調(diào)用棧溢等。對(duì)于這類錯(cuò)誤的導(dǎo)致的應(yīng)用程序中斷,僅靠程序本身無(wú)法恢復(fù)和預(yù)防,遇到這樣的錯(cuò)誤,建議讓程序終止。
Exception類表示程序可以處理的異常,可以捕獲且可能恢復(fù)。遇到這類異常,應(yīng)該盡可能處理異常,使程序恢復(fù)運(yùn)行,而不應(yīng)該隨意終止異常。
Exception類又分為運(yùn)行時(shí)異常(Runtime Exception)和受檢查的異常(Checked Exception ),運(yùn)行時(shí)異常;ArithmaticException,IllegalArgumentException,編譯能通過(guò),但是一運(yùn)行就終止了,程序不會(huì)處理運(yùn)行時(shí)異常,出現(xiàn)這類異常,程序會(huì)終止。而受檢查的異常,要么用try。。。catch捕獲,要么用throws字句聲明拋出,交給它的父類處理,否則編譯不會(huì)通過(guò)。
①.Exception(異常)是應(yīng)用程序中可能的可預(yù)測(cè)、可恢復(fù)問(wèn)題。一般大多數(shù)異常表示中度到輕度的問(wèn)題。異常一般是在特定環(huán)境下產(chǎn)生的,通常出現(xiàn)在代碼的特定方法和操作中。在 EchoInput 類中,當(dāng)試圖調(diào)用 readLine 方法時(shí),可能出現(xiàn) IOException 異常。
Exception 類有一個(gè)重要的子類 RuntimeException。RuntimeException 類及其子類表示“JVM 常用操作”引發(fā)的錯(cuò)誤。例如,若試圖使用空值對(duì)象引用、除數(shù)為零或數(shù)組越界,則分別引發(fā)運(yùn)行時(shí)異常(NullPointerException、ArithmeticException)和 ArrayIndexOutOfBoundException。
②.Error(錯(cuò)誤)表示運(yùn)行應(yīng)用程序中較嚴(yán)重問(wèn)題。大多數(shù)錯(cuò)誤與代碼編寫(xiě)者執(zhí)行的操作無(wú)關(guān),而表示代碼運(yùn)行時(shí) JVM(Java 虛擬機(jī))出現(xiàn)的問(wèn)題。例如,當(dāng) JVM 不再有繼續(xù)執(zhí)行操作所需的內(nèi)存資源時(shí),將出現(xiàn) OutOfMemoryError。
檢查異常 和 未檢查異常 的劃分
Java中的異常分為兩大類:
1.Checked Exception(非Runtime Exception)
2.Unchecked Exception(Runtime Exception)
運(yùn)行時(shí)異常
RuntimeException類是Exception類的子類,它叫做運(yùn)行時(shí)異常,Java中的所有運(yùn)行時(shí)異常都會(huì)直接或者間接地繼承自RuntimeException類。
Java中凡是繼承自Exception,而不繼承自RuntimeException類的異常都是非運(yùn)行時(shí)異常。
一個(gè)try后面可以跟多個(gè)catch,但不管多少個(gè),最多只會(huì)有一個(gè)catch塊被執(zhí)行。
對(duì)于非運(yùn)行時(shí)異常(checked exception),必須要對(duì)其進(jìn)行處理,否則無(wú)法通過(guò)編譯。
處理方式有兩種:
1.使用try..catch..finally進(jìn)行捕獲;
2.在產(chǎn)生異常的方法聲明后面寫(xiě)上throws 某一個(gè)Exception類型,如throws Exception,將異常拋出到外面一層去。
對(duì)于運(yùn)行時(shí)異常(runtime exception),可以對(duì)其進(jìn)行處理,也可以不處理。推薦不對(duì)運(yùn)行時(shí)異常進(jìn)行處理。
擴(kuò)展:錯(cuò)誤和異常的區(qū)別(Error vs Exception)
1).java.lang.Error: Throwable的子類,用于標(biāo)記嚴(yán)重錯(cuò)誤。合理的應(yīng)用程序不應(yīng)該去try/catch這種錯(cuò)誤。絕大多數(shù)的錯(cuò)誤都是非正常的,就根本不該出現(xiàn)的。
java.lang.Exception: Throwable的子類,用于指示一種合理的程序想去catch的條件。即它僅僅是一種程序運(yùn)行條件,而非嚴(yán)重錯(cuò)誤,并且鼓勵(lì)用戶程序去catch它。
**2).Error和RuntimeException **及其子類都是未檢查的異常(unchecked exceptions),而所有其他的Exception類都是檢查了的異常(checked exceptions).
checked exceptions: 通常是從一個(gè)可以恢復(fù)的程序中拋出來(lái)的,并且最好能夠從這種異常中使用程序恢復(fù)。比如FileNotFoundException, ParseException等。檢查了的異常發(fā)生在編譯階段,必須要使用try…catch(或者throws)否則編譯不通過(guò)。
**unchecked exceptions: **通常是如果一切正常的話本不該發(fā)生的異常,但是的確發(fā)生了。發(fā)生在運(yùn)行期,具有不確定性,主要是由于程序的邏輯問(wèn)題所引起的。比如ArrayIndexOutOfBoundException, ClassCastException等。從語(yǔ)言本身的角度講,程序不該去catch這類異常,雖然能夠從諸如RuntimeException這樣的異常中catch并恢復(fù),但是并不鼓勵(lì)終端程序員這么做,因?yàn)橥耆珱](méi)要必要。因?yàn)檫@類錯(cuò)誤本身就是bug,應(yīng)該被修復(fù),出現(xiàn)此類錯(cuò)誤時(shí)程序就應(yīng)該立即停止執(zhí)行。 因此,面對(duì)Errors和unchecked exceptions應(yīng)該讓程序自動(dòng)終止執(zhí)行,程序員不該做諸如try/catch這樣的事情,而是應(yīng)該查明原因,修改代碼邏輯。
RuntimeException:RuntimeException體系包括錯(cuò)誤的類型轉(zhuǎn)換、數(shù)組越界訪問(wèn)和試圖訪問(wèn)空指針等等。
處理RuntimeException的原則是:如果出現(xiàn) RuntimeException,那么一定是程序員的錯(cuò)誤。例如,可以通過(guò)檢查數(shù)組下標(biāo)和數(shù)組邊界來(lái)避免數(shù)組越界訪問(wèn)異常。其他(IOException等等)checked異常一般是外部錯(cuò)誤,例如試圖從文件尾后讀取數(shù)據(jù)等,這并不是程序本身的錯(cuò)誤,而是在應(yīng)用環(huán)境中出現(xiàn)的外部錯(cuò)誤。
以上這篇Java_異常類(錯(cuò)誤和異常,兩者的區(qū)別介紹) 就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
常見(jiàn)的異常;
ArrayIndexOutOfBoundsException 數(shù)組下標(biāo)越界異常,
ArithmaticException 算數(shù)異常 如除數(shù)為零
NullPointerException 空指針異常
IllegalArgumentException 不合法參數(shù)異常