




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
Java異常處理Javaexceptionhandling第七章目標(biāo)/OBJECTIVE01020304掌握利用Java的try、catch、finally等關(guān)鍵字處理異常掌握異常的預(yù)防措施,增強代碼的健壯性熟悉異常的利弊,學(xué)會合理運用掌握異常的本質(zhì),了解異常的產(chǎn)生原因及其產(chǎn)生的影響01異常的引出7.1異常的引出在實際的Java程序開發(fā)中,異常猶如航行的船只在大海中遇到的風(fēng)浪,總是會有些許波折。這些異常,按其性質(zhì)可分為兩類:受檢異常和非受檢異常。受檢異常就像是提前預(yù)知到的,早在編譯時期就能夠被明確檢測到,開發(fā)者需要在代碼中做出明確的處理,就如同船長在航行中要靈活應(yīng)對各種天氣變化。這些異常包括文件不存在、網(wǎng)絡(luò)連接失敗等等。而非受檢異常則類似于船只在航行時突然遇到的風(fēng)暴,常常是由于外部環(huán)境原因引起的,如引用的庫未導(dǎo)入、數(shù)組越界等等。開發(fā)者需要迅速做出反應(yīng),以保障程序的運行完整。異常的引出知識點概述針對ATM可能出現(xiàn)的異常,是可以提前預(yù)測的,所以該異常屬于受檢異常。根據(jù)日常生活的常識可以知道,ATM取錢金額不可為負(fù)數(shù),且一旦取錢金額大于賬戶余額,取錢操作就會失敗。人們從ATM上取錢時,偶爾會遇到諸如“余額不足”的情況。為應(yīng)對取款金額和賬戶余額可能存在的異常:取款金額為負(fù)數(shù)、取款金額大于賬戶余額,設(shè)計一個簡單的異常處理程序。例題任務(wù)7.1異常的引出例題7.1引出ATM的異常1Copilot指令://設(shè)計一個簡單的ATM操作程序,針對存取金額可能存在的異常,反饋錯誤信息。7.1異常的引出例題分析上圖的類模塊ATM中的代碼實現(xiàn)了小明取錢行為的相應(yīng)反饋,比如取錢數(shù)值amount如果大于余額balance,則ATM反饋信息“賬戶余額不足!”。這樣小明就可以很清楚自己能取出多少錢,以及完成之后的賬戶余額。例7.1中的代碼實現(xiàn)了即時異常引出,使得用戶不至于因為信息匱乏而不知所措。但是,為了實現(xiàn)這一功能,代碼中添加了大量的條件控制語句。雖然程序的健壯性增強了,但是也顯得很臃腫,可讀性不佳。更重要的是,異常反饋信息很少,用戶無法確切了解錯誤原因和解決方法。特別是遇到以上沒能包含的條件時,程序?qū)o法返回任何異常信息給用戶。7.1異常的引出Java異常處理機制為了解決復(fù)雜異常問題,Java內(nèi)置了異常處理機制,預(yù)定義了Exception類。這就像是一個異常信息庫,可以自定義各種錯誤信息,只要觸發(fā)異常反饋條件即可向用戶反饋針對性的異常信息,也可以附帶可行的解決方法。另外,一些可預(yù)見的常見錯誤也可以統(tǒng)一歸為一類,提高了處理效率和代碼復(fù)用率。有了這種機制,程序執(zhí)行時遭遇異常就不是簡單的結(jié)束運行了,而是執(zhí)行對應(yīng)的異常處理,反饋異常信息,然后盡可能恢復(fù)程序執(zhí)行。這為開發(fā)者帶來了靈活的異常處理機制,合理運用可以大幅提高用戶體驗。02異常的概念7.2異常的概念在程序運行過程中,如果發(fā)生了某個異常,就稱程序產(chǎn)生了一個異常事件,隨之產(chǎn)生一個異常對象,該對象會包含異常的詳細(xì)信息。異常對象可以由正在運行的程序產(chǎn)生,也可能是JVM或者外部環(huán)境產(chǎn)生。由于運行的程序本身不具有處理異常的能力,因此該異常對象會被轉(zhuǎn)移至一個特殊系統(tǒng):Java運行時系統(tǒng)。它包含了運行一個Java程序所需要的所有組件,包括JVM、類加載器、執(zhí)行引擎等。而異常處理就是通過JVM實現(xiàn)的。這個過程也被稱為拋出(throw)一個異常。針對可能出現(xiàn)異常的代碼塊,通常使用try關(guān)鍵字包圍,然后通過catch塊捕獲并處理特定類型的異常。這樣,即使異常發(fā)生,程序也能夠繼續(xù)執(zhí)行。7.2異常的概念優(yōu)化例題7.17.2異常的概念異常的分類Java異常是編程中常見的概念,它們用于處理在程序執(zhí)行期間可能出現(xiàn)的錯誤情況。異常分為兩大類:Checked異常和Unchecked異常,又稱受檢異常和非受檢異常。下面將詳細(xì)介紹這兩種異常以及它們的子類。Checked異常(受檢異常)這類異常是在編譯階段被檢測到的,程序必須對其進(jìn)行處理,否則編譯將失敗。就好比在出門旅行之前,需要提前安排好行程和備用計劃,以防各種突發(fā)問題。常見的Checked異常包括IOException、SQLException等。這些異常通常表示外部環(huán)境的問題,例如文件不存在、數(shù)據(jù)庫連接失敗等。7.2異常的概念Unchecked異常(非受檢異常)非Unchecked異常是在程序運行過程中才會被檢測到的,通常由程序員的錯誤導(dǎo)致的,如數(shù)組越界,引用空對象等。這就好比人們突發(fā)感冒,而卻無法提前預(yù)知,但是可以通過良好的生活習(xí)慣以減少患病的可能性?!癛untimeException”類及其子類就屬于Unchecked異常。
下圖為數(shù)組越界的非受檢異常。7.2異常的概念Error類在Java中,Error類及其子類是用于表示嚴(yán)重錯誤的異常體系。與一般的異常Exception不同,Error類表示的是程序在運行時遇到的一些無法恢復(fù)的錯誤,通常是系統(tǒng)層面的問題。Error錯誤不應(yīng)該被開發(fā)者捕獲和處理,而是由JVM和底層系統(tǒng)來處理,因為這些錯誤往往超出了開發(fā)者的控制范圍。Error(錯誤)Error類是所有錯誤的父類,本身也是Throwable類的子類。這一錯誤體系通常表示JVM無法解決的問題,因此開發(fā)者不應(yīng)該視圖捕獲和處理這些錯誤。7.2異常的概念StackOverflowError類OutOfMemoryError表示JVM耗盡了內(nèi)存資源,無法再為對象分配足夠的空間。通常由于程序中存在內(nèi)存泄漏或者應(yīng)用程序需要更多內(nèi)存空間時導(dǎo)致。OutOfMemoryError類StackOverflowError表示方法調(diào)用棧溢出,通常是由于遞歸調(diào)用深度過大導(dǎo)致的。也可能是程序邏輯錯誤或者無限遞歸的結(jié)果。NoClassDefFoundError類NoClassDefFoundError表示虛擬機在運行時找不到類的定義。這可能是由于類路徑不正確或者類文件缺失導(dǎo)致。03Java異常處理7.3Java異常處理在Java程序開發(fā)過程中,異常處理是一種關(guān)鍵的機制,用于檢測和應(yīng)對程序執(zhí)行過程中可能發(fā)生的異常情況。異??梢员粧伋霾⒃谡{(diào)用堆棧中傳播,進(jìn)而通過適當(dāng)?shù)奶幚頇C制得以解決,這使得它在Java中具有重要的地位。其核心概念是在程序中合理地檢測、捕獲、處理和傳播異常。異常處理的重要性體現(xiàn)在程序健壯性和可維護(hù)性方面。在軟件開發(fā)中,無法預(yù)測的錯誤和異常情況可能隨時發(fā)生,而良好的異常處理能夠確保程序在遇到問題時能夠從容地應(yīng)對,不至于導(dǎo)致整個程序的崩潰。通過合理處理異常,程序員能夠增加程序的穩(wěn)定性,提高用戶體驗,同時也更容易排查和修復(fù)潛在的問題,從而提高代碼的可維護(hù)性。異常處理的益處不僅限于錯誤的捕獲和處理,還包括對資源的合理管理。通過在異常處理中釋放資源,例如關(guān)閉文件或網(wǎng)絡(luò)連接,可以避免資源泄漏,提高程序的效率和可用性。此外,異常處理還為開發(fā)者提供了一種途徑,使得他們能夠更加靈活地處理各種異常情況,從而更好地控制程序的行為。7.3Java異常處理異常處理在方法調(diào)用過程中,異常的傳播方式是通過調(diào)用堆棧向上或向下傳遞。當(dāng)在方法內(nèi)部拋出異常時,它可以被當(dāng)前方法內(nèi)的異常處理機制捕獲和處理,如果當(dāng)前方法沒有適當(dāng)處理,異常將被傳遞給調(diào)用者。這種傳播方式確保異常能夠在調(diào)用層次中被逐層捕獲和處理,最終決定程序的行為,如下表所示。異常處理不僅僅是在出現(xiàn)錯誤時提供一個“安全網(wǎng)”,也是一種控制程序流程的有效手段,使得程序能夠在異常情況下保持穩(wěn)健的執(zhí)行。7.3Java異常處理try-catch塊每一位經(jīng)驗豐富的開發(fā)者都應(yīng)該未雨綢繆,事先明確可能發(fā)生異常的代碼塊,就像敏銳的人民解放軍一樣,時刻洞察祖國周圍的局勢,并隨時以迅雷不及掩耳之勢應(yīng)對各種突發(fā)情況。處理異常的代碼塊分為兩個模塊。一個是監(jiān)測代碼可能出現(xiàn)異常的安全衛(wèi)士try,時刻準(zhǔn)備接收異常,并將其拋給后面的異常處理機器人catch。它負(fù)責(zé)捕獲并處理各種異常。二者分工合作,共同為Java程序的運行保駕護(hù)航。7.3Java異常處理例題任務(wù)隨著智能化教育走進(jìn)家庭,很多學(xué)生擁有了智能家教機器人。機器人會監(jiān)測學(xué)生可能發(fā)生的異常狀況,例如:不寫數(shù)學(xué)作業(yè)、數(shù)學(xué)題目不會。程序捕獲異常以后,針對性執(zhí)行應(yīng)對措施:督促學(xué)生學(xué)習(xí)、提供數(shù)學(xué)輔導(dǎo)。接下來設(shè)計一個家教機器人輔導(dǎo)學(xué)生學(xué)習(xí)數(shù)學(xué)。分析try塊包含可能發(fā)生的異常,一旦檢測到異常發(fā)生,將其拋給相鄰的catch捕獲并處理。7.3Java異常處理例題7.2引用try-catch塊輔導(dǎo)數(shù)學(xué)1Copilot指令://設(shè)計一個家教機器人,并嘗試捕獲學(xué)生可能發(fā)生的異常,比如不寫作業(yè),數(shù)學(xué)題目不會等等。分析異常類型,針對性處理異常。請使用Java語言設(shè)計一個程序?qū)崿F(xiàn)。7.3Java異常處理例題分析在例題7.2中,我們自定義了一個HomeworkTutor類,該類包含兩個自定義異常類型NoHomeworkException和MathProblemException。通過創(chuàng)建實例對象tutor,我們可以捕獲學(xué)生的異常狀態(tài),并反饋對應(yīng)的信息。try-catch-finally塊注意到類方法work(),其中有一個try-catch塊。try關(guān)鍵字的作用是監(jiān)測塊中代碼運行的狀態(tài),如果發(fā)生異常,將其拋給catch塊。被拋出的異常會按照自上而下的順序,匹配對應(yīng)異常類型的catch塊。如果是NoHomeworkException類型的異常,那么就會創(chuàng)建一個異常實例對象e用來接收異常。最后由該catch塊中的代碼處理異常,嘗試恢復(fù)程序運行。如果異常非常嚴(yán)重以至于無法處理,那么catch塊可以調(diào)用System.exit()方法終止程序運行。對于finally關(guān)鍵字,不論它之前的try-catch塊有無捕獲到異常,finally之后的語句都會執(zhí)行。而唯一使得finally后的語句不被執(zhí)行的可能是,在上文提到的catch塊中,調(diào)用了System.exit()方法強制終止程序。7.3Java異常處理ArithmeticException類為了應(yīng)對開發(fā)過程中常見的異常,Java預(yù)定義了若干個公共異常。在對象未經(jīng)實例化的情況下,引用該對象就會觸發(fā)NullPointerException異常。比如定義一個對象數(shù)組,通過數(shù)組的引用試圖調(diào)用該對象,以及它的方法。由于該對象數(shù)組中的元素未經(jīng)初始化,是未經(jīng)實例化的空引用。所以就會導(dǎo)致NullPointerException異常。NullPointerException類該類主要應(yīng)對一些由數(shù)學(xué)計算錯誤誘發(fā)的異常情況。在除法運算中,除數(shù)不可為0。一旦除數(shù)為0,則會觸發(fā)此異常。NegativeArraySizeException類實際開發(fā)過程中數(shù)組的大小一般為非零數(shù)。如果定義數(shù)組的Size為0,就會導(dǎo)致NegativeArraySizeException異常。04拋出異常7.4拋出異常當(dāng)程序執(zhí)行到可能引發(fā)異常的代碼塊時,通過使用關(guān)鍵字"throw"主動拋出異常對象,或者通過方法聲明使用"throws"聲明可能拋出的異常類型。在日常開發(fā)中,拋出異常的主要目的是為了提醒開發(fā)者可能存在的問題,并通過異常處理機制進(jìn)行處理,以確保程序的穩(wěn)定性和可靠性。這有助于在出現(xiàn)異常時進(jìn)行相應(yīng)的錯誤處理或日志記錄,使開發(fā)者更好地理解和調(diào)試程序,提高代碼的健壯性和可維護(hù)性。7.4拋出異常throw關(guān)鍵字用法這里的exception_object是表示異常的對象。通過手動拋出異常,程序可以在檢測到錯誤或者特殊情況時,中斷正常的執(zhí)行流程,從而進(jìn)行相應(yīng)的錯誤處理。與之相關(guān)的是異常的捕獲和處理,可以通過try-catch塊構(gòu)建異常處理模塊,保證程序在異常發(fā)生時能夠進(jìn)行適當(dāng)?shù)奶幚?。拋出異常時需要創(chuàng)建一個具體的異常對象,并標(biāo)注具體的異常信息。用法如下。7.4拋出異常方法聲明該聲明包含了返回類型,方法名及其參數(shù)。由throws關(guān)鍵字連接此方法可能拋出的錯誤類型。當(dāng)方法內(nèi)部的代碼執(zhí)行過程中發(fā)生這些異常時,編譯器會強制要求調(diào)用者在調(diào)用該方法時,要么在其周圍使用try-catch語句來捕獲異常,要么將異常繼續(xù)通過throws語句傳遞給更高層的調(diào)用者進(jìn)行處理。在Java中使用throws關(guān)鍵字拋出可能發(fā)生的異常,而使用throw關(guān)鍵字拋出一個具體異常。在開發(fā)過程中不要混淆二者的作用。05Java自定義異常7.5Java自定義異常在Java中,除了上文提到的幾類預(yù)定義的異常類型以外,開發(fā)者還可以自定義異常類型。需要注意的是,通常情況下自定義異常繼承自Exception類或其子類。以下是自定義異常類型的標(biāo)準(zhǔn)語法。7.5Java自定義異常例題任務(wù)互聯(lián)網(wǎng)購物帶來了極大的便利,然而當(dāng)在線用戶過多時,購物車可能會出現(xiàn)異常,例如物品數(shù)量顯示為負(fù)數(shù)。為了有效處理這類問題,可以根據(jù)用戶購物車中物品數(shù)量是否為負(fù)數(shù),自定義相應(yīng)的異常,在程序中捕獲并處理該異常。7.5Java自定義異常例題7.3購物車物品數(shù)量異常處理1Copilot指令://請利用Java自定義異常,處理購物車商品數(shù)量可能為負(fù)的異常。06本章小節(jié)本章小結(jié)異常處理在Java中是保障程序穩(wěn)定性的關(guān)鍵機制。了解異常的基本概念,包括可檢查和不可檢查異常,以及異常類層次結(jié)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 河北省唐山市玉田縣2024-2025學(xué)年四下數(shù)學(xué)期末教學(xué)質(zhì)量檢測試題含解析
- 無錫太湖學(xué)院《副教學(xué)訓(xùn)練理論與實踐(1)》2023-2024學(xué)年第二學(xué)期期末試卷
- 2024-2025學(xué)年安徽省宣城市郎溪縣數(shù)學(xué)三下期末考試試題含解析
- 鄭州美術(shù)學(xué)院《中國音樂史專題研究》2023-2024學(xué)年第二學(xué)期期末試卷
- 黃河交通學(xué)院《書法技法與設(shè)計文化》2023-2024學(xué)年第二學(xué)期期末試卷
- 湖北工業(yè)大學(xué)工程技術(shù)學(xué)院《產(chǎn)品設(shè)計思維與創(chuàng)意》2023-2024學(xué)年第二學(xué)期期末試卷
- 上海紐約大學(xué)《舞美與燈光設(shè)計》2023-2024學(xué)年第二學(xué)期期末試卷
- 天津科技大學(xué)《教育法律法規(guī)與師德修養(yǎng)》2023-2024學(xué)年第二學(xué)期期末試卷
- 陽泉師范高等專科學(xué)?!犊諝饫砘瘷z驗》2023-2024學(xué)年第二學(xué)期期末試卷
- 唐山市唐??h2025屆小升初數(shù)學(xué)高頻考點模擬卷含解析
- (新版)廣電全媒體運營師資格認(rèn)證考試復(fù)習(xí)題庫(含答案)
- 2024年法律職業(yè)資格考試(試卷一)客觀題試卷與參考答案
- 安全生產(chǎn)重大事故隱患排查報告表
- 統(tǒng)編版必修上冊第五《鄉(xiāng)土中國》導(dǎo)讀優(yōu)質(zhì)課件PPT
- 電纜敷設(shè)施工方案及安全措施范文
- 市場營銷課程標(biāo)準(zhǔn)
- ppt模板:信保專用中國出口信用保險公司課件
- 2021年四川省綿陽市中考物理真題及答案
- 小學(xué)音樂課后服務(wù)教學(xué)設(shè)計方案計劃
- 人教版八年級數(shù)學(xué)下冊全冊教案(完整版)教學(xué)設(shè)計
- 【畢業(yè)論文】知識競賽搶答器PLC設(shè)計
評論
0/150
提交評論