什么是異常?
exception一詞是“exceptional event”這一短語(yǔ)的簡(jiǎn)寫(xiě)。
定義:異常是在程序執(zhí)行期間發(fā)生的事件,它會(huì)破壞程序指令的正常流程。
當(dāng)方法中發(fā)生錯(cuò)誤時(shí),該方法會(huì)創(chuàng)建一個(gè)對(duì)象并將其交給運(yùn)行時(shí)系統(tǒng),該對(duì)象稱(chēng)為異常對(duì)象,包含有關(guān)錯(cuò)誤的信息,包括錯(cuò)誤發(fā)生時(shí)的類(lèi)型和程序狀態(tài),創(chuàng)建異常對(duì)象并將其交給運(yùn)行時(shí)系統(tǒng)稱(chēng)為拋出異常。
在方法拋出異常后,運(yùn)行時(shí)系統(tǒng)會(huì)嘗試查找處理它的內(nèi)容,處理異常的可能的“內(nèi)容”的集合是已被調(diào)用以獲取發(fā)生錯(cuò)誤的方法的有序方法列表,方法列表稱(chēng)為調(diào)用堆棧(請(qǐng)參見(jiàn)下圖)。
運(yùn)行時(shí)系統(tǒng)在調(diào)用堆棧中搜索包含可處理異常的代碼塊的方法,這段代碼稱(chēng)為異常處理程序,搜索從發(fā)生錯(cuò)誤的方法開(kāi)始,然后按照調(diào)用方法的相反順序遍歷調(diào)用堆棧,找到適當(dāng)?shù)奶幚沓绦蚝螅\(yùn)行時(shí)系統(tǒng)會(huì)將異常傳遞給處理程序,如果拋出的異常對(duì)象的類(lèi)型與處理程序可以處理的類(lèi)型匹配,則認(rèn)為異常處理程序是合適的。
所選擇的異常處理程序被稱(chēng)為捕獲異常,如果運(yùn)行時(shí)系統(tǒng)窮舉搜索調(diào)用堆棧上的所有方法而沒(méi)有找到適當(dāng)?shù)漠惓L幚沓绦?,如下圖所示,則運(yùn)行時(shí)系統(tǒng)(以及程序)終止。
使用異常來(lái)管理錯(cuò)誤與傳統(tǒng)的錯(cuò)誤管理技術(shù)相比具有一些優(yōu)勢(shì),你可以在“異常優(yōu)勢(shì)”部分了解更多信息。
上一篇:管理源文件和類(lèi)文件 下一篇:捕獲或指定要求文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/74037.html
Java? 教程 Java教程是為JDK 8編寫(xiě)的,本頁(yè)面中描述的示例和實(shí)踐沒(méi)有利用在后續(xù)版本中引入的改進(jìn)。 Java教程是希望使用Java編程語(yǔ)言創(chuàng)建應(yīng)用程序的程序員的實(shí)用指南,其中包括數(shù)百個(gè)完整的工作示例和數(shù)十個(gè)課程,相關(guān)課程組被組織成教程。 覆蓋基礎(chǔ)知識(shí)的路徑 這些教程以書(shū)籍的形式提供,如Java教程,第六版,前往Amazon.com購(gòu)買(mǎi)。 入門(mén) 介紹Java技術(shù)和安裝Java開(kāi)發(fā)軟件并使用...
捕獲或指定要求 有效的Java編程語(yǔ)言代碼必須遵守捕獲或指定需求,這意味著可能拋出某些異常的代碼必須包含以下任一項(xiàng): 捕獲異常的try語(yǔ)句,try必須為異常提供處理程序,如捕獲和處理異常中所述。 一種方法,指定它可以?huà)伋霎惓?,該方法必須提供一個(gè)throws子句,列出異常,如通過(guò)方法拋出指定異常中所述。 不符合捕獲或指定要求的代碼將無(wú)法編譯。 并非所有異常都受捕獲或指定要求的約束,為了理解原因,...
異常的優(yōu)點(diǎn) 現(xiàn)在你已經(jīng)知道了什么是異常以及如何使用它們,現(xiàn)在是時(shí)候了解在程序中使用異常的優(yōu)勢(shì)了。 優(yōu)點(diǎn)1:將錯(cuò)誤處理代碼與常規(guī)代碼分開(kāi) 異常提供了從程序的主邏輯中分離異常發(fā)生時(shí)應(yīng)該做什么的細(xì)節(jié)的方法,在傳統(tǒng)的編程中,錯(cuò)誤檢測(cè)、報(bào)告和處理通常會(huì)導(dǎo)致混亂的意大利面代碼,例如,考慮這里的偽代碼方法將整個(gè)文件讀入內(nèi)存。 readFile { open the file; determine...
如何拋出異常 在捕獲異常之前,某些代碼必須拋出一個(gè),任何代碼都可能拋出異常:你的代碼,來(lái)自其他人編寫(xiě)的包中的代碼,例如Java平臺(tái)附帶的包或Java運(yùn)行時(shí)環(huán)境,無(wú)論拋出什么異常,它總是使用throw語(yǔ)句拋出。 你可能已經(jīng)注意到,Java平臺(tái)提供了許多異常類(lèi),所有類(lèi)都是Throwable類(lèi)的后代,并且所有類(lèi)都允許程序區(qū)分在程序執(zhí)行期間可能發(fā)生的各種類(lèi)型的異常。 你還可以創(chuàng)建自己的異常類(lèi)來(lái)表示你編寫(xiě)的...
摘要:挺多人咨詢(xún)的,異常處理用切面注解去實(shí)現(xiàn)去全局異常處理。全局異常處理類(lèi),代碼如下代碼解析如下抽象類(lèi)是用來(lái)處理全局錯(cuò)誤時(shí)進(jìn)行擴(kuò)展和實(shí)現(xiàn)注解標(biāo)記的切面排序,值越小擁有越高的優(yōu)先級(jí),這里設(shè)置優(yōu)先級(jí)偏高。 本文內(nèi)容 為什么要全局異常處理? WebFlux REST 全局異常處理實(shí)戰(zhàn) 小結(jié) 摘錄:只有不斷培養(yǎng)好習(xí)慣,同時(shí)不斷打破壞習(xí)慣,我們的行為舉止才能夠自始至終都是正確的。 一、為什么要全局...
閱讀 2326·2021-09-22 15:27
閱讀 3178·2021-09-03 10:32
閱讀 3506·2021-09-01 11:38
閱讀 2503·2019-08-30 15:56
閱讀 2220·2019-08-30 13:01
閱讀 1543·2019-08-29 12:13
閱讀 1425·2019-08-26 13:33
閱讀 899·2019-08-26 13:30