版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
§5-1程序運(yùn)行異常Java語言程序設(shè)計(jì)教學(xué)目標(biāo)任務(wù)分析在學(xué)生信息管理系統(tǒng)中,學(xué)生信息主要包含學(xué)號(hào)、姓名、性別、年齡、qq號(hào)等信息,程序執(zhí)行時(shí),用戶通過控制臺(tái)依次錄入各項(xiàng)信息,當(dāng)用戶錄入合法數(shù)據(jù)時(shí)程序可正常運(yùn)行并得到預(yù)期結(jié)果;但如果用戶因?yàn)檎`操作或輸入非法數(shù)據(jù)時(shí),則程序會(huì)引起意外終止。為此,我們在程序設(shè)計(jì)中應(yīng)該如何避免這些意外的發(fā)生呢?教學(xué)內(nèi)容1異常類異常23異常處理特點(diǎn)異常處理機(jī)制4一、異常但是,......!一路暢通堵車!撞車!正常情況下,大牛每日開車去上班,耗時(shí)大約30分鐘一、異常異常是指在程序的執(zhí)行過程中所發(fā)生的不正常的事件,會(huì)中斷正在運(yùn)行的程序異常程序運(yùn)行程序中斷運(yùn)行一、異常程序中的錯(cuò)誤分類編譯錯(cuò)誤、邏輯錯(cuò)誤和運(yùn)行錯(cuò)誤。編譯錯(cuò)誤是因?yàn)槌绦虼嬖谡Z法問題,未能通過編譯而產(chǎn)生的,由編譯系統(tǒng)負(fù)責(zé)檢測和報(bào)告,沒有編譯錯(cuò)誤是一個(gè)程序運(yùn)行的基本條件;邏輯錯(cuò)誤是指程序不能按照預(yù)期的方案執(zhí)行,它是機(jī)器本身無法檢測的,需要人工對(duì)運(yùn)行結(jié)果及程序邏輯進(jìn)行分析,從中找出錯(cuò)誤的原因;運(yùn)行錯(cuò)誤是程序運(yùn)行過程中產(chǎn)生的錯(cuò)誤,這類錯(cuò)誤可能來自程序員沒有預(yù)料到的各種情況,或者超出程序員控制的各種因素。如被零除、數(shù)組下標(biāo)越界、不能打開指定的文件等,這類錯(cuò)誤稱為異常(Exception)也叫例外。二、異常類
Java中所有異常都是用類表示的。當(dāng)程序發(fā)生異常時(shí),會(huì)生成某個(gè)異常類的對(duì)象。Throwable是java.lang包中一個(gè)專門用來處理異常的類,它有兩個(gè)直接子類:Error和Exception。二、異常類Error類Error類的異常為內(nèi)部錯(cuò)誤,包括動(dòng)態(tài)鏈接失敗、線程死鎖、圖形界面錯(cuò)誤、虛擬機(jī)錯(cuò)誤等,通常Java程序不能捕獲這類異常,也不會(huì)拋棄這種異常。常見的錯(cuò)誤類有:AnnotationFormatError、AssertionError、AWTError、LinkageError、CoderMalfunctionError、FactoryConfigurationError、ThreadDeath,VirtualMachineError、TransformerFactoryConfigurationError等。Exception類Exception處理用戶程序應(yīng)當(dāng)捕獲的異常情況,Java異常處理就是Exception的處理。二、異常類Exception又分為運(yùn)行時(shí)異常和非運(yùn)行時(shí)異常?!斑\(yùn)行時(shí)異常”:是程序運(yùn)行階段才可能出現(xiàn)的異常,如果編碼階段不進(jìn)行處理,不影響程序的編譯。運(yùn)行時(shí)異常包含所有運(yùn)行時(shí)異常子類,如被零除、數(shù)組下標(biāo)越界、空指針異常等,“非運(yùn)行時(shí)異?!保喝鏘/O異常等,SQL異常等?!胺沁\(yùn)行時(shí)異?!痹诰幋a階段必須進(jìn)行處理,如果不進(jìn)行處理,則會(huì)導(dǎo)致編譯出錯(cuò)。二、異常類異常類說明Exception異常層次結(jié)構(gòu)的根類RuntimeException許多運(yùn)行時(shí)異常的基類ArithmeticException算術(shù)錯(cuò)誤,如以零作除數(shù)IllegalArgumentException方法接收到非法參數(shù)ArrayIndexOutOfBoundException數(shù)組大小小于或大于實(shí)際的數(shù)組大小NullPointerException嘗試訪問null對(duì)象的成員或方法NumberFormatException數(shù)字轉(zhuǎn)化格式異常,比如字符串到int型數(shù)字的轉(zhuǎn)換無效InputMismatchException輸入不匹配異常IOExceptionI/O異常的根類FileNotFoundException找不到文件EOFException文件結(jié)束InterruptedException線程中斷ClassNotFoundException不能加載所需的類常見的異常及其作用如表所示三、異常處理機(jī)制Java異常處理機(jī)制就是在程序代碼執(zhí)行過程中出現(xiàn)異常后,會(huì)按照我們預(yù)先制定的處理方法對(duì)異常進(jìn)行處理,異常處理完成后,程序會(huì)繼續(xù)運(yùn)行下去。程序中預(yù)先制定的處理方法對(duì)異常進(jìn)行處理產(chǎn)生異常!程序正常運(yùn)行處理完畢,程序繼續(xù)運(yùn)行對(duì)異常進(jìn)行處理三、異常處理機(jī)制Java語言提供兩種處理異常的機(jī)制:捕獲異常和聲明拋棄異常1.捕獲異常:在Java程序出現(xiàn)異常時(shí),將會(huì)沿著方法的調(diào)用棧逐層回溯,尋找處理這一異常的代碼。找到能夠處理這種類型異常的方法后,運(yùn)行時(shí)系統(tǒng)把當(dāng)前異常對(duì)象交給這個(gè)方法進(jìn)行處理,這一過程稱為捕獲(catch)異常。這是一種積極的異常處理機(jī)制。如果Java運(yùn)行時(shí)系統(tǒng)找不到可以捕獲異常的方法,則運(yùn)行時(shí)系統(tǒng)將終止,相應(yīng)的Java程序也將退出。三、異常處理機(jī)制2.聲明拋棄異常:當(dāng)Java程序出現(xiàn)異常時(shí),如果一個(gè)方法并不知道如何處理所出現(xiàn)的異常,則可在方法聲明時(shí),聲明拋棄(throws)異常,這是一種消極的異常處理機(jī)制。四、異常處理機(jī)制特點(diǎn)Java通過面向?qū)ο蟮姆椒ㄟM(jìn)行異常處理,把各種不同的異常事件進(jìn)行分類,體現(xiàn)了良好的層次性,提供了良好的接口,這種機(jī)制對(duì)于具有動(dòng)態(tài)特性的復(fù)雜程序提供了強(qiáng)有力的控制方式。Java的異常處理機(jī)制使得處理異常的代碼和常規(guī)代碼分開,大大減少了代碼量,增加了程序的可讀性。任務(wù)實(shí)施同學(xué)們自己動(dòng)手完成本節(jié)任務(wù):在學(xué)生信息管理系統(tǒng)完成信息錄入的代碼測試輸入合法數(shù)據(jù),程序運(yùn)行結(jié)果測試輸入非法數(shù)據(jù),程序是否崩潰定義一個(gè)字符串,鍵盤錄入其信息,查看該字符串長度,輸出該字符串中的最后一個(gè)字符,并將該字符串轉(zhuǎn)為整數(shù)。最后嘗試訪問該字符串下標(biāo)為length位置上的字符,查看是否可以正常訪問。按“工單5-1”要求完成任務(wù)同步訓(xùn)練§5-2異常處理Java語言程序設(shè)計(jì)教學(xué)目標(biāo)任務(wù)分析前面我們在錄入學(xué)生信息時(shí)發(fā)現(xiàn),用戶如果不能錄入正常信息會(huì)導(dǎo)致程序崩潰,我們無法保證用戶每次都能按正確格式錄入,但我們可以通過對(duì)用戶可能會(huì)出現(xiàn)的問題提前進(jìn)行處理,以保證程序不崩潰。教學(xué)內(nèi)容1聲明異常捕獲異常2throw拋出異常3一、捕獲異常捕獲異常的try-catch-finally語句的其語法格式為:try{//可能會(huì)引發(fā)異常的代碼}catch(ExceptionType1e){//對(duì)ExceptionType1的處理}catch(ExceptionType2e){//對(duì)ExceptionType2的處理}......finally{//該結(jié)構(gòu)并非必須,但如果有,則否發(fā)生了異常,finally語句都會(huì)執(zhí)行......//}捕獲異常的第一步是用try{…}選定捕獲異常的范圍,由try所限定的代碼塊中的語句在執(zhí)行過程中可能會(huì)生成異常對(duì)象并拋棄。一、捕獲異常1.try每個(gè)try代碼塊可以伴隨一個(gè)或多個(gè)catch語句,用于處理try代碼塊中所生成的異常事件。catch語句只需要一個(gè)形式參數(shù)來指明它所能夠捕獲的異常類型,這個(gè)類必須是Throwable的子類,運(yùn)行時(shí)系統(tǒng)通過參數(shù)值把被拋棄的異常對(duì)象傳遞給catch塊。①如果try中代碼沒有出現(xiàn)異常,則不會(huì)進(jìn)入catch塊。②如果出現(xiàn)異常對(duì)象,則會(huì)依次與catch塊中的異常類型進(jìn)行驗(yàn)證,是否是屬于該類型的異常,如果是,則進(jìn)入該catch塊,后續(xù)catch塊不再繼續(xù)驗(yàn)證,即不會(huì)再執(zhí)行后續(xù)catch塊。如何出現(xiàn)的異常對(duì)象不屬于所有catch塊中的異常,則無法捕獲該異常,該異常依然會(huì)導(dǎo)致程序崩潰,所以為防止此種情況可以在最后的catch塊設(shè)置捕獲的異常類型為Exception類型。一、捕獲異常2.catch捕獲異常的最后一步是通過finally語句為異常處理提供一個(gè)統(tǒng)一的出口,使得在控制流轉(zhuǎn)到程序的其它部分以前,能夠?qū)Τ绦虻臓顟B(tài)做統(tǒng)一的管理。一般是用來關(guān)閉文件或釋放其他的系統(tǒng)資源。雖然finally作為try-catch-finally結(jié)構(gòu)的一部分,但在程序中是可選的,也就是說可以沒有finally語句。如果存在finally語句,不論try塊中是否發(fā)生了異常,是否執(zhí)行過catch語句,都要執(zhí)行finally語句。一、捕獲異常3.finally示例代碼當(dāng)數(shù)組下標(biāo)超界時(shí),捕獲異常publicstaticvoidmain(Stringargs[]){ Stringstr[]={"北京","山東","上海"}; inti=0; while(i<4){ try{ System.out.println(str[i]); }catch(ArrayIndexOutOfBoundsExceptione){ System.out.println("數(shù)組下標(biāo)越界"); }finally{ System.out.println("這行信息總是會(huì)打印,無論是否出現(xiàn)異常"); } i++; }}二、聲明異常
當(dāng)Java程序運(yùn)行時(shí)系統(tǒng)得到一個(gè)異常對(duì)象時(shí),如果一個(gè)方法并不知道如何處理所出現(xiàn)的異常,則可在方法聲明時(shí),聲明拋棄(throws)異常。如果方法中有可能拋出多個(gè)異常,異常列表中要一一列出,各異常之間用逗號(hào)隔開。語法如下:修飾符返回類型方法名(參數(shù)列表)throws異常列表{方法體;}如:publicvoidmyMethod()throwsIOException{……}說明:通過使用throws聲明異常的方法,該方法自己不處理本方法中產(chǎn)生的異常,而是由調(diào)用它的方法來處理這些異常。三、throw拋出異常
除程序編譯或運(yùn)行階段系統(tǒng)自動(dòng)拋出異常外,用戶還可以根據(jù)實(shí)際需求手動(dòng)通過throw關(guān)鍵字拋出異常。其一般格式為:thrownewXxxException();或
XxxException()ex=newXxxException();throwex;
如果手動(dòng)拋出的為非運(yùn)行時(shí)異常,則throw所在方法必須是通過throws關(guān)鍵字聲明了異常的方法,或使用try-catch對(duì)該非運(yùn)行時(shí)異常進(jìn)行處理。四、自定義異常
盡管Java提供了相當(dāng)多的異常類,但Exception提供的系統(tǒng)異常并不一定總能捕獲程序中發(fā)生的所有錯(cuò)誤。當(dāng)用戶遇到了系統(tǒng)預(yù)定義的異常類不能描述的問題時(shí),還需要?jiǎng)?chuàng)建用戶自定義的異常,比如在銀行系統(tǒng)中存錢的數(shù)據(jù)如果小于0即為一種異?,F(xiàn)象。
用戶定義的異常必須繼承自Throwable、Exception類或Exception的其他子類。語法:publicclass類名extends異常類名{//類體}
自定義的異常必須由用戶自己拋出throw,格式為:thrownew自定義異常類名()示例代碼自定義存款異常類BalanceException繼承繼承自
ExceptionpublicclassBalanceExceptionextendsException{ publicBalanceException(){} publicBalanceException(Stringmessage){//帶參構(gòu)造方法,指定異常消息 super(message); }
}示例代碼//定義銀行類Bank,該類具有存款方法publicclassBank{ //存款方法,判斷存款金額如果為負(fù)數(shù),則聲明拋出BalanceException publicstaticvoiddeposit(intbalance)throwsBalanceException{ if(balance<0){ //創(chuàng)建自定義異常對(duì)象 BalanceExceptionbalanceException=newBalanceException("存款不能為負(fù)數(shù)"); //拋出異常
throwbalanceException; }else{ System.out.println("存款成功"); } }示例代碼
//在main方法調(diào)用存款方法 publicstaticvoidmain(String[]args){ intbalance; Scannersc=newScanner(System.in); System.out.println("請輸入存款金額:"); balance=sc.nextInt(); //使用try-catch處理BalanceException try{ deposit(balance); }catch(Exceptione){ e.printStackTrace(); } }}
測試輸入金額為正數(shù)和負(fù)數(shù)shi任務(wù)實(shí)施使用try-catch-finally解決因
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 【大學(xué)課件】單片機(jī)原理與應(yīng)用設(shè)計(jì) 子程序結(jié)構(gòu)
- DB14T-日光溫室草莓固碳生產(chǎn)技術(shù)規(guī)程編制說明
- 《PCT在細(xì)菌感染診》課件
- 《母嬰護(hù)理員》課件
- 《電子郵件課件》課件
- 單位管理制度展示選集【職員管理】十篇
- 醫(yī)藥高新區(qū)排水防澇設(shè)施項(xiàng)目可行性研究報(bào)告模板-立項(xiàng)拿地
- 單位管理制度收錄大合集人員管理篇十篇
- 《頭暈的健康教育》課件
- 2025房屋裝修合同范本版
- 辦理落戶新生兒委托書模板
- 2024年計(jì)算機(jī)二級(jí)WPS考試題庫(共380題含答案)
- 施工現(xiàn)場環(huán)境因素識(shí)別、評(píng)價(jià)及環(huán)境因素清單、控制措施
- 【9道期末】安徽省宣城市2023-2024學(xué)年九年級(jí)上學(xué)期期末道德與法治試題(含解析)
- 2024年醫(yī)藥行業(yè)年終總結(jié).政策篇 易聯(lián)招采2024
- 《工程造價(jià)專業(yè)應(yīng)用型本科畢業(yè)設(shè)計(jì)指導(dǎo)標(biāo)準(zhǔn)》
- 倉庫主管2025年終總結(jié)及2025工作計(jì)劃
- 兒科護(hù)士述職報(bào)告2024
- 2024年01月11396藥事管理與法規(guī)(本)期末試題答案
- 股權(quán)投資協(xié)議的風(fēng)險(xiǎn)控制
- 酒店微笑服務(wù)培訓(xùn)
評(píng)論
0/150
提交評(píng)論