版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、,第6章 異常處理機制,內容摘要,一個優(yōu)秀的程序,不只是它能夠實現強大的功能,而且還要看程序本身有沒有相應錯誤處理機制。我們知道,程序中的漏洞(Bug)總無處不在,即使我們認為程序中應該沒有錯誤了,漏洞總會在某個時候鉆出來困擾我們。面對程序中各種層出不窮的各類錯誤,Java提供了異常處理機制來協助開發(fā)人員處理各種可能出現的錯誤。 在本章中,將會介紹字符串Java異常概念、異常處理機制和自定義異常。,學習目標,掌握異常概念 掌握異常組織結構 熟練掌握try-catcht語句捕獲異常 掌握多個catch語句使用 熟練掌握try-catch語句嵌套 掌握finally語句 掌握異常拋出和聲明 掌握自
2、定義異常創(chuàng)建和使用,6.1 異常,對于一個程序來說,可能會發(fā)生三種錯誤,語法錯誤、運行時錯誤和邏輯錯誤。語法錯誤的產生是在我們編寫代碼的過程可能輸入的字符錯誤,不符合相應的命令格式等。運行時錯誤是程序在運行中出現意料不到情況,如除數為零,數組越界等。邏輯錯誤是程序的運行結果和我們預想的結果不一致,這是一種難以調試的錯誤。使用Java的異常處理機制主要是處理運行時的錯誤,異常就是運行時錯誤。,6.1.1 異常概念,在Java語言中,異常又稱為例外,是運行時錯誤。由于Java程序是在網絡環(huán)境下運行的,因此,安全應當是首要考慮的因素。為了能夠及時有效地處理程序中的運行錯誤,Java專門引入了異常類和
3、異常類層次。 產生異常的原因有三種: 第一種是Java內部錯誤發(fā)生時,Java虛擬機產生的異常。 第二種是編寫的程序代碼中的錯誤所產生的異常。 第三種是通過throw語句手動生成的異常,這種異常稱為“檢查的異?!?,一般被用來告知該方法的調用者一些必要的信息。,6.1.1 異常概念,Java通過面向對象的方法來處理異常。在一個方法的運行過程中,如果發(fā)生了異常,則這個方法產生代表該異常的一個對象,并把它交給運行時系統,運行時系統尋找相應的代碼來處理這一異常。我們把生成異常對象,并把它提交給運行時系統的過程稱為拋出(throw)一個異常。運行時系統在方法的調用棧中查找,直到找到能夠處理該類型異常的對
4、象,這一個過程稱為捕獲(catch)一個異常。,6.1.2 Java異常類組織結構,在Java中,任何異常對象都是java.lang.Throwablel類或其子類的對象,即所有異常類型都是內置類Throwable的子類。因此,Throwable在異常類層次結構的頂層。緊接著Throwable下面的是把異常分成兩個不同分支的子類:Exception和Error。如圖6-1所示:,6.1.2 Java異常類組織結構,圖6-1 異常結構圖,6.2 異常處理機制,Java中處理異常,有兩種方式,一種積極的處理異常的方式,一種是消極的處理異常的方法,二者各自用在不同的場合。積極的處理異常的方式,主要是
5、使用try-catch語句來解決問題,其流程如下:當程序中拋出一個異常后,程序從程序中導致異常的代碼處跳出,java虛擬機檢測尋找和try關鍵字匹配的處理該異常的catch塊,如果找到,將控制權交到catch塊中的代碼,然后繼續(xù)往下執(zhí)行程序,try塊中發(fā)生異常的代碼不會被重新執(zhí)行。如果沒有找到處理該異常的catch塊,在所有的finally塊代碼被執(zhí)行和當前線程的所屬的ThreadGroup的uncaughtException方法被調用后,遇到異常的當前線程被終止。遇到異常,就會馬上處理。消極的異常處理方式,主要是利用throw和throws關鍵字實現,throw表示主動拋出一個異常,手動中止
6、程序運行,throws關鍵字用在方法的后面表示聲明一個異常,告訴使用該方法的使用者方法具有那些異常,使用者可以根據自己的情況處理這些聲明的異常。,6.2.1 try-catch語句捕獲異常,在Java中,通常是采用try-catch語句捕獲異常并處理。捕獲異常是一種積極的處理異常的方式。語法如下: try statement_block1 catch(Throwable throwableObj) statement_block2 ,6.2.1 try-catch語句捕獲異常,statement_block1代碼塊可能會拋出一個或多個異常。catch語句的參數類似于方法的聲明,包括一個異常類型
7、和一個異常對象。異常類型必須為Throwable類的子類,它指明了catch語句可以處理的異常類型,異常對象則由運行時系統在try語句代碼塊statement_block1中生成并被捕獲。statement_block2語句塊是在產生異常時所采取的措施,其中可以調用異常對象的方法。catch語句可以有多個,分別處理不同類型的異常。 如果在try塊內產生異常,則會將此異常對象交給Java運行系統。此時Java運行時系統從上到下分別對每個catch語句處理的異常類型進行檢測,直到檢測到第一個類型相匹配的catch語句為止。類型匹配是指catch所處理的異常類型與生成的異常對象的類型完全一致,或者是
8、生成異常對象的父類,因此,catch語句的排列順序應該是從特殊到一般。,6.2.1 try-catch語句捕獲異常,一個catch語句也可以捕捉多個異常類型,這時它的異常類型參數應該是這多個異常類型的父類,程序設計中要根據具體的情況來選擇catch語句的異常處理類型。,6.2.2 多個catch語句,在某些情況下,某個代碼塊可能拋出多個異常。處理這種情況,可以定義兩個或更多的catch子句,每個子句捕獲一種類型的異常。當拋出異常時,每一個catch子句被依次檢查,第一個匹配異常類型的catch子句將被執(zhí)行,而其他的catch子句不被執(zhí)行。當該catch語句執(zhí)行以后,接著執(zhí)行trycatch語句
9、塊后面的語句。 當用多catch語句時,catch語句塊在次序上有先后之分。這是因為從最前面的catch語句塊依次先后進行異常類型匹配。這樣,如果父異常類在子異常類之前,那么首先匹配的將是父異常類,子異常類將不會獲得進行匹配的機會,也即子異常類型所在的catch語句將是不可到達的語句。Java中不可到達的代碼是一個錯誤。,6.2.3 try-catch語句嵌套,try語句可以被嵌套。也就是說,一個try語句可以在另一個try塊內部。每次進入try語句,異常的前后關系都會被推入堆棧。如果一個內部的try語句不含特殊異常的catch處理程序,堆棧將彈出,下一個try語句的catch處理程序將檢查是
10、否與之匹配。這個過程將繼續(xù)直到一個catch語句匹配成功,或者是直到所有的嵌套try語句被檢查耗盡。如果沒有catch語句匹配,Java的運行時系統將處理這個異常。,6.2.4 finally語句,finally關鍵字是對Java異常處理模型的最佳補充。finally結構使代碼總會執(zhí)行,而不管有無異常發(fā)生。使用finally可以維護對象的內部狀態(tài),并可以清理非內存資源。finally語句和try語句一起使用,基本語法如下: try statement_block1 catch(Throwable throwableObj) statement_block2 finally statement_
11、block3 ,6.2.4 finally語句,一般情況下,無論是否有異常拋出,都會執(zhí)行finally語 句塊中的語句,流程示意圖如圖6-6所示: 圖6-6 trycatchfinally流程示意圖,6.2.4 finally語句,如果異常被拋出,finally甚至是在沒有與該異常相匹配的catch子句情況下也將執(zhí)行。trycatchfinally語句塊的執(zhí)行情況可以細分為以下三種情況: 如果try代碼塊中沒有拋出異常,則執(zhí)行完try代碼塊之后直接執(zhí)行finally代碼塊,然后執(zhí)行trycatchfinally語句塊之后的語句。 如果try代碼塊中拋出異常,并被catch子句捕捉到,那么在拋出
12、異常的地方終止try代碼塊的執(zhí)行,轉而執(zhí)行相匹配的catch代碼塊,之后執(zhí)行finally代碼塊。如果finally代碼塊中沒有拋出異常,則繼續(xù)執(zhí)行trycatchfinally語句塊之后的語句;如果finally代碼塊中拋出異常,則把該異常傳遞給該方法的調用者。 如果try代碼塊中拋出的異常沒有被任何catch子句捕捉到,那么將直接執(zhí)行finally代碼塊中的語句,并把該異常傳遞給該方法的調用者。,6.2.4 finally語句,finally語句塊必須與try或try/catch語句塊配合使用。如果finally塊存在,則它總會執(zhí)行。但是如果代碼在try內部執(zhí)行一條System.exit(
13、0);語句,則應用程序將終止而不會執(zhí)行finally語句塊。,6.2.5 拋出和聲明異常,到目前為止,只是獲取了被Java運行時系統拋出的異常,并在catch塊中進行處理。除了捕獲異常外,我們還可以在程序中主動拋出異常和聲明異常。 拋出異常 程序使用throw語句拋出異常。throw語句的通常形式如下: throw ThrowableInstance;,6.2.5 拋出和聲明異常,聲明異常 有兩種可以處理Throwable對象的方法:一種是使用trycatch語句;另一種是使用throws關鍵字聲明異常。 如果一個方法可以導致一個異常但該方法并不處理該異常,那么該方法使用throws子句來聲明該異常。含有throws子句的基本形式的方法聲明如下: ret-type methName(param-list) throws except-list /方法體 ,6.2.5 拋出和聲明異常,一個throws子句列舉了一個方法可能拋出的所有異常類型,各個異常類型之間使用逗號分割。凡是Error或RuntimeException子類的異常都不需要在異常列表中指定,而其他類型的異常必須
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 維修勞務合同模板(2篇)
- 南京航空航天大學《編譯原理》2021-2022學年第一學期期末試卷
- 南京工業(yè)大學浦江學院《市場營銷》2023-2024學年第一學期期末試卷
- 房建施工組織設計
- 某市中心諾蘭攝影工作室工程項目施工組織設計
- 壓濾車間施工組織設計
- 《小星星》說課稿
- 南京工業(yè)大學浦江學院《給排水工程制圖與CAD》2023-2024學年第一學期期末試卷
- 南京工業(yè)大學《自動控制原理》2021-2022學年第一學期期末試卷
- 南京工業(yè)大學《藥物新劑型與新技術》2022-2023學年第一學期期末試卷
- 金融服務營銷報告總結
- 35kv集電線路監(jiān)理標準細則
- 橋式起重機定期檢查記錄表
- T∕CACM 1090-2018 中醫(yī)治未病技術操作規(guī)范 穴位敷貼
- 2024版人教版英語初一上單詞默寫單
- 化學實驗室安全智慧樹知到期末考試答案2024年
- 經典房地產營銷策劃培訓(全)
- 工人入場安全教育課件
- 【川教版】《生命 生態(tài) 安全》二年級上冊第12課 少點兒馬虎 多點兒收獲 課件
- 人教版數學四年級上冊第五單元 《平行四邊形和梯形》 大單元作業(yè)設計
- 靜配中心差錯預防
評論
0/150
提交評論