




已閱讀5頁,還剩10頁未讀, 繼續(xù)免費閱讀
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第6章 常見錯誤和異常處理,本章主要介紹編程中常見的錯誤,以及在程序運行過程中出現(xiàn)錯誤或者異常現(xiàn)象時,Java語言的處理機制和方法,包括異常的概念、異常的處理方法等內容。 本章要點 6.1 常見錯誤 6.2 異常處理 思考與練習6,第6章 常見錯誤和異常處理,6.2.1 什么是異常處理 異常指的是程序運行時出現(xiàn)的非正常情況,又稱為差錯、違例等。在上一節(jié)中介紹的運行錯誤就是異常的主要現(xiàn)象。當異?,F(xiàn)象發(fā)生時,會造成程序運行中斷、系統(tǒng)死機等問題。Java程序可以用特定語句來處理異常并繼續(xù)程序執(zhí)行,而不讓程序中斷。Java語言提供一個異常處理類Exception類,專門處理程序執(zhí)行期間的錯誤。每當Java程序運行過程中發(fā)生一個可識別的運行錯誤時,即該錯誤有一個異常類與之相對應時,系統(tǒng)都會產(chǎn)生一個相應的該異常類的對象,即產(chǎn)生一個異常。Java語言異常處理機制有以下一些優(yōu)點: (1)Java語言通過面向對象的方法進行異常處理,把各種不同的異常事件進行分類,體現(xiàn)了良好的層次性,提供了良好的接口,這種機制對于具有動態(tài)運行特性的復雜程序提供了強有力的控制方式。 (2)Java語言的異常處理機制使得處理異常的內容和程序本身內容分開,降低了程序的復雜性,增強了程序的可讀性。 (3)由于把異常事件當成對象來處理,利用類的層次性可以把多個具有相同父類的異常統(tǒng)一處理,也可區(qū)分不同的異常分別處理,使用非常靈活。,第6章 常見錯誤和異常處理,6.2.2 Exception類 Java語言的異常類是處理運行時錯誤的特殊類,每一種異常類對應一種特定的運行錯誤。所有的Java異常類都是系統(tǒng)類庫中的Exception類的子類 。 Exception類有若干子類,每一個子類代表了一種特定的運行時錯誤。這些子類有些是系統(tǒng)事先定義好并包含在Java類庫中的,稱為系統(tǒng)定義的運行異常。 系統(tǒng)定義的運行異常通常對應著系統(tǒng)運行錯誤。由于這種錯誤可能導致操作系統(tǒng)錯誤甚至是整個系統(tǒng)的癱瘓,所以需要定義異常類來特別處理。 常見的系統(tǒng)定義異常如下: (1)ArithmeticException:數(shù)學錯誤。 (2)ArrayIndexOutOfBoundsException:數(shù)組下標越界使用。 (3)ClassNotFoundException:未找到欲使用的類。 (4)FileNotFoundException:未找到指定的文件或目錄。,第6章 常見錯誤和異常處理,6.2.2 Exception類 (5)InterruptedException:線程在睡眠、等待或其他原因暫停時被其他線程打斷。 (6)IOException:輸入、輸出錯誤。 (7)MalformedURLException:URL格式錯誤。 (8)NullPointerException:引用空的尚無內存空間的對象。 (9)SecurityException:安全性錯誤,如Applet欲讀寫文件。 (10)UnknownHostException:無法確定主機的IP地址。 系統(tǒng)定義的異常主要用來處理系統(tǒng)可以預見的較常見的運行錯誤,對于某個應用程序所特有的運行錯誤,則需要編程者根據(jù)程序的特殊邏輯在應用程序中自行創(chuàng)建自定義的異常類和異常對象。這種用戶自定義異常主要用來處理用戶程序中特定的邏輯運行錯誤。,第6章 常見錯誤和異常處理,6.2.3 異常處理的過程 在Java語言中,異常處理最常用的是try-catch-finally語句結構,以及throw和throws關鍵字。下面我們將一一進行介紹。 1try-catch-finally 通過使用try-catch-finally語句來捕獲一個或多個異常,基本格式為: try 語句體 catch( 異常錯誤類型 變量名 ) 語句體 finally 語句體 ,第6章 常見錯誤和異常處理,6.2.3 異常處理的過程 其中,catch語句可以有一個或多個,而finally語句可以沒有,但是,至少要有一個catch語句或finally語句。 try語句中的語句體是程序中有可能會產(chǎn)生一個或多個異常的語句。 catch語句的參數(shù)類似于方法的參數(shù),其包括一個異常類型和一個異常對象。異常類型必須為Exception類的子類,它指明了catch語句所處理的異常類型。在程序運行時,當try語句體中產(chǎn)生異常時,系統(tǒng)會通過catch語句捕獲這個異常,然后執(zhí)行catch語句中的語句體對該異常進行處理。 catch語句可以有多個,分別處理不同類的異常。Java運行時系統(tǒng)從上到下分別對每個catch語句處理的異常類型進行檢測,直到找到類型相匹配的catch語句為止。這里,類型匹配指catch所處理的異常類型與生成的異常對象的類型完全一致或者是它的父類。因此,catch語句的排列順序應該是從特殊到一般。,第6章 常見錯誤和異常處理,6.2.3 異常處理的過程 也可以用一個catch語句處理多個異常類型,這時它的異常類型參數(shù)應該是這多個異常類型的父類,程序設計中要根據(jù)具體的情況來選擇catch語句的異常處理類型。 在捕捉異常時,還可以使用finally語句。在try-catch之后接上finally語句,表示執(zhí)行try-catch描述后,無論有無異常,最后必須執(zhí)行finally語句中的語句體。,第6章 常見錯誤和異常處理,6.2.3 異常處理的過程 2關鍵字throws和throw 在有些情況下,程序并不需要使用try-catch-finally處理它所生成的異常,而是由調用它的方法來處理這些異常,這時就要用到throws子句,它包含在方法的聲明中。其格式如下: 返回類型 方法名( 參數(shù) ) throws 異常類名 語句體 其中,異常類名可以是多個,但需要用逗號隔開。,第6章 常見錯誤和異常處理,6.2.3 異常處理的過程 2關鍵字throws和throw 一般這種拋出異常的語句應該被定義為在滿足一定條件時執(zhí)行,例如:把throw語句放在if語句的判斷分支中,只有當if條件得到滿足,即用戶定義的邏輯錯誤發(fā)生時才執(zhí)行。 含有throw語句的方法,應該在方法頭定義中增加如下部分: throws 異常類名 這樣做主要是為了通知所有欲調用此方法的方法。由于該方法包含throw語句,所以要準備接受和處理它在運行過程中可能會拋出的異常。如果方法中的throw語句不止一個,定義方法時的異常類名也不止一個,應該包含所有可能產(chǎn)生的異常。,第6章 常見錯誤和異常處理,6.2.4 多異常的處理 catch語句用來接收try語句體中可能產(chǎn)生的異常,一個catch語句通常會用同種方式來處理它所接收到的所有異常,但是實際上一個try語句體可能產(chǎn)生多種不同的異常,如果希望能采取不同的方法來處理這些異常,就需要使用多異常處理機制。 多異常處理是通過在一個try語句后面定義若干個catch語句來實現(xiàn)的,每個catch語句體用來接收和處理一種特定的異常對象。 當try語句體拋出一個異常時,程序的流程首先轉向第一個catch語句,并審查當前異常對象可否為這個catch語句所接收。能接收是指異常對象與catch的參數(shù)類型相匹配,也就是說,異常對象與參數(shù)屬于相同的異常類、異常對象屬于參數(shù)異常類的子類或者異常對象實現(xiàn)了參數(shù)所定義的接口。 如果try語句體產(chǎn)生的異常對象被第一個catch語句所接收,則程序的流程將直接跳轉到這個catch語句的語句體中,語句體執(zhí)行完畢后就退出當前方法,try語句體中尚未執(zhí)行的語句和其他的catch語句將被忽略。,第6章 常見錯誤和異常處理,6.2.4 多異常的處理 如果所有的catch語句都不能與當前的異常對象匹配,則說明當前方法不能處理這個異常對象,程序流程將返回到調用該方法的上層方法。如果這個上層方法中定義了與所產(chǎn)生的異常對象相匹配的catch語句,流程就跳轉到這個catch語句中,否則將繼續(xù)回溯更上層的方法。 如果所有的方法中都找不到合適的catch語句,則由Java運行系統(tǒng)來處理這個異常對象。此時通常會中止程序的執(zhí)行,退出虛擬機返回操作系統(tǒng),并在標準輸出上打印相關的異常信息。 如果try語句體中所有語句的執(zhí)行都沒有引發(fā)異常,則所有的catch語句體都會被忽略而不予執(zhí)行。 catch語句體中的語句應根據(jù)異常的不同而執(zhí)行不同的操作,比較通用的操作是打印異常和錯誤的相關信息,包括異常名稱、產(chǎn)生異常的方法名等。 由于異常對象與catch語句的匹配是按照catch語句的先后排列順序進行的,所以在處理多異常時應注意認真設計各catch語句的排列順序。一般來說,將處理較具體和較常見的異常的catch語句應放在前面,而可以與多種異常相匹配的catch語句應放在較后的位置。此外,不能將子類異常的catch語句放在父類的后面,否則在編譯時會產(chǎn)生錯誤。,第6章 常見錯誤和異常處理,6.2.5 自定義異常處理 Java類庫中定義的異常主要用來處理系統(tǒng)可以預見的比較常見的運行錯誤。如果某個應用程序有特殊的要求,則可能出現(xiàn)系統(tǒng)不能識別的運行錯誤,這時就需要用戶自己創(chuàng)建異常和異常類,使系統(tǒng)能夠識別這種錯誤并進行處理,增強用戶程序的健壯性和容錯性,從而使系統(tǒng)更加穩(wěn)定。 用戶自定義的異常類一般都是Exception類的直接或間接子類。 創(chuàng)建自定義異常的基本步驟如下。 (1)定義一個新的異常類,其必須繼承Exception類、Exception類的子類或用戶自定義的其他異常類。定義的格式如下: class 自定義異常類名 extends 父異常類名 語句體 ,第6章 常見錯誤和異常處理,6.2.5 自定義異常處理 (2)為新的異常類定義屬性和方法,或重載父類的屬性和方法,使之能夠體現(xiàn)出程序中出現(xiàn)這種異常的信息。 例如: public class NumberRangeException extends Exception public NumberRangeException() super(); public NumberRangeException( String s ) super( s ); ,第6章 常見錯誤和異常處理,6.2.5 自定義異常處理 上面的程序定義了一個名為NumberRangeException的異常類,它是Exception類的子類。該類具有兩個構造方法,第一個構造方法使用super();語句直接調用父類的沒有參數(shù)的構造方法,第二個構造方法使用super( s );語句直接調用父類參數(shù)為字符串類型的構造方法。 當然,我們也可以自己編寫構造方法的具體內容,以便完成更復雜的操作。 (3)拋出用戶自定義的異常。用戶自定義異常不可能依靠系統(tǒng)自動拋出,而必須通過throw語句拋出異常,通常是通過條件判斷確定是否拋出這個異常類的新對象。 拋出用戶自定義異常格式如下: 返回類型 方法名( 參數(shù)1, 參數(shù)2, ) throw 自定義異常類 if( 條件判斷 ) throw ( new 自定義異常類名( this ) ); ,第6章 常見錯誤和異常處理,6.2.5 自定義異常處理 上面的程序定義了一個名為NumberRangeException的異常類,它是Exception類的子類。該類具有兩個構造方法,第一個構造方法使用super();語句直接調用父類的沒有參數(shù)的構造方法,第
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 資源重組對經(jīng)濟發(fā)展的推動作用試題及答案
- 北京市石景山區(qū)2025屆高三一??荚嚁?shù)學試題 含解析
- 2025屆江蘇省南京市、鹽城市高三下學期3月一模政治試題 含解析
- 公司火災撲救應急預案(3篇)
- 計算機考試備考工具試題及答案
- 森林火災應急撲救預案(3篇)
- 2025年國際市場中的戰(zhàn)略風險分析試題及答案
- 開源社區(qū)參與與貢獻試題及答案
- 消防火災應急預案是什么(3篇)
- 行政法學考試難點試題及答案揭秘
- 樹木移栽施工協(xié)議書
- 《結直腸癌精準治療策略與實踐課件》
- 水務公司筆試題目及答案
- 延安通和電業(yè)有限責任公司招聘真題2024
- 2025年離婚協(xié)議范文下載8篇
- 病媒生物防治試題及答案
- 正定古城介紹課件
- 超聲技術在麻醉監(jiān)測中的新興應用-全面剖析
- 2024年陜西省城固縣事業(yè)單位公開招聘醫(yī)療衛(wèi)生崗筆試題帶答案
- 2025年公共文化服務管理考試試題及答案
- 金融投資公司商業(yè)計劃書模板范文
評論
0/150
提交評論