




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
項(xiàng)目7異常處理——異常成績(jī)處理《Java程序設(shè)計(jì)案例教程(微課版)(第2版)》項(xiàng)目導(dǎo)入
在測(cè)試學(xué)生成績(jī)管理系統(tǒng)的成績(jī)輸入模塊時(shí),發(fā)現(xiàn)輸入不合法的成績(jī)時(shí)系統(tǒng)會(huì)停止運(yùn)行,因此通過Java中的異常處理機(jī)制來確保程序的健壯性。通過這個(gè)程序培養(yǎng)學(xué)生主動(dòng)積極面對(duì)和解決問題的態(tài)度,以應(yīng)對(duì)人生中的各種挑戰(zhàn)。學(xué)習(xí)目標(biāo)?掌握異常的概念和體系結(jié)構(gòu)。?掌握異常的兩種處理方式。?掌握自定義異常。
?培養(yǎng)主動(dòng)積極面對(duì)和解決問題的態(tài)度。(素養(yǎng)目標(biāo))目錄CONTENTS任務(wù)7.1什么是異常任務(wù)7.2try-catch和finally任務(wù)7.3
throws關(guān)鍵字項(xiàng)目實(shí)施
異常成績(jī)處理項(xiàng)目實(shí)訓(xùn)
教學(xué)時(shí)電腦異常處理的模擬任務(wù)7.4
throw關(guān)鍵字7.1什么是異常在程序運(yùn)行過程中,可能會(huì)出現(xiàn)一些意外的情況,比如被0除、數(shù)組下標(biāo)越界等。這些意外情況會(huì)導(dǎo)致程序出錯(cuò)或者崩潰,從而影響程序的正常執(zhí)行。如果不能很好地處理這些意外情況,程序的穩(wěn)定性就會(huì)受到質(zhì)疑。在Java語言中,這些程序的意外情況稱為異常(exception),出現(xiàn)異常時(shí)的處理稱為異常處理。合理的異常處理可以使整個(gè)項(xiàng)目更加穩(wěn)定,也可以使項(xiàng)目中正常的邏輯代碼和錯(cuò)誤處理的代碼分離,便于代碼的閱讀和維護(hù)。【例7-1】認(rèn)識(shí)訪問數(shù)組元素時(shí)可能遇到的下標(biāo)越界異常。publicclassExample7_1{ publicstaticvoidmain(String[]args){inta[]={5,6,7,8};for(inti=0;i<5;i++)System.out.println(a[i]);System.out.println("程序繼續(xù)向下執(zhí)行"); }}7.1什么是異常Java異常類體系架構(gòu)如圖所示。7.1什么是異常7.1什么是異常所有異常都繼承自java.lang.Throwable類,Throwable類有兩個(gè)直接子類,Error類和Exception類。Error類稱為錯(cuò)誤類,表示Java運(yùn)行時(shí)產(chǎn)生的系統(tǒng)內(nèi)部錯(cuò)誤或資源耗盡的錯(cuò)誤。它表示比較嚴(yán)重的錯(cuò)誤,僅靠修改程序本身是不能恢復(fù)執(zhí)行的。當(dāng)程序發(fā)生這種嚴(yán)重錯(cuò)誤時(shí),通常的做法是通知用戶并終止程序的執(zhí)行。Exception類稱為異常類,表示程序本身可以處理的錯(cuò)誤。在Java程序中進(jìn)行的異常處理都是針對(duì)Exception類及其子類的。在Exception類的眾多子類中有一個(gè)特殊的子類——RuntimeException類,該類及其子類表示運(yùn)行時(shí)異常。除了此類分支,Exception類下所有其他的子類都用于表示編譯時(shí)異常。7.1什么是異常1.運(yùn)行時(shí)異常運(yùn)行時(shí)異常的特點(diǎn)是Java編譯器不會(huì)對(duì)其進(jìn)行檢查。也就是說,當(dāng)程序中出現(xiàn)這類異常時(shí),即使沒有使用try-catch語句捕獲或使用throws關(guān)鍵字聲明拋出異常,程序也能編譯通過。運(yùn)行時(shí)異常一般是由程序中的邏輯錯(cuò)誤引起的,在程序運(yùn)行時(shí)無法恢復(fù)。2.編譯時(shí)異常編譯時(shí)異常的特點(diǎn)是Java編譯器會(huì)對(duì)其進(jìn)行檢查,如果出現(xiàn)異常,就必須對(duì)異常進(jìn)行處理,否則程序無法通過編譯。處理編譯時(shí)異常有兩種方式,具體方式如下。(1)使用try-catch語句捕獲異常。(2)用throws關(guān)鍵字聲明拋出異常,開發(fā)人員對(duì)其進(jìn)行處理。目錄CONTENTS任務(wù)7.1什么是異常任務(wù)7.2try-catch和finally任務(wù)7.3
throws關(guān)鍵字任務(wù)7.4
throw關(guān)鍵字項(xiàng)目實(shí)施
異常成績(jī)處理項(xiàng)目實(shí)訓(xùn)
教學(xué)時(shí)電腦異常處理的模擬7.2try-catch和finally在程序中由于發(fā)生了異常,程序會(huì)立即終止,無法繼續(xù)向下執(zhí)行。為了解決這樣的問題,Java提供了一種對(duì)異常進(jìn)行處理的方式——異常捕獲。異常捕獲通過使用try-catch語句來實(shí)現(xiàn),語法格式如下:try{//可能發(fā)生異常的程序代碼塊}catch(ExceptionTypee){//處理代碼塊}當(dāng)try代碼塊中的程序發(fā)生異常時(shí),系統(tǒng)會(huì)將這個(gè)異常的信息封裝成一個(gè)異常對(duì)象,并將這個(gè)對(duì)象傳遞給catch代碼塊。【例7-2】使用try-catch語句對(duì)【例7-1】中的異常進(jìn)行捕獲并處理。publicclassExample7_2{ publicstaticvoidmain(String[]args){inta[]={5,6,7,8};
try{for(inti=0;i<5;i++)System.out.println(a[i]);System.out.println("over"); }catch(ArrayIndexOutOfBoundsExceptione){System.out.println("捕獲的異常信息為:"+e.getMessage());} System.out.println("程序繼續(xù)向下執(zhí)行"); }}7.2try-catch和finally【例7-3】對(duì)【例7-2】的異常處理增加finally代碼塊。publicclassExample7_3{
publicstaticvoidmain(String[]args){inta[]={5,6,7,8};
try{for(inti=0;i<5;i++)System.out.println(a[i]);System.out.println("over"); }catch(ArrayIndexOutOfBoundsExceptione){System.out.println("捕獲的異常信息為:"+e.getMessage());return;
}finally{System.out.println("執(zhí)行finally代碼塊");}System.out.println("程序繼續(xù)向下執(zhí)行"); }}7.2try-catch和finally目錄CONTENTS任務(wù)7.1什么是異常任務(wù)7.2try-catch和finally任務(wù)7.3throws關(guān)鍵字任務(wù)7.4
throw關(guān)鍵字項(xiàng)目實(shí)施
異常成績(jī)處理項(xiàng)目實(shí)訓(xùn)
教學(xué)時(shí)電腦異常處理的模擬7.3throws關(guān)鍵字當(dāng)一個(gè)方法產(chǎn)生編譯時(shí)異常,而它本身不對(duì)這類異常進(jìn)行處理時(shí),就需要在該方法的頭部聲明拋出這個(gè)異常,以便將該異常傳遞到方法的外部進(jìn)行處理。通過throws關(guān)鍵字便可以實(shí)現(xiàn),具體語法格式如下:[修飾符]返回值類型方法名([參數(shù)1,參數(shù)2,…])throws異常類型1[異常類型2,…]{}其中,throws關(guān)鍵字需要寫在方法聲明的后面,throws后面需要聲明方法中發(fā)生的異常的類型,通常將這種做法稱為方法聲明拋出一個(gè)異常。【例7-4】使用throws關(guān)鍵字聲明拋出異常。publicclassExample7_4{publicstaticvoidmain(String[]args){ intres=divide(4,0);
System.out.println(res);}
publicstaticintdivide(intx,inty)throwsException{intresult=x/y;
returnresult;
}}7.3throws關(guān)鍵字【例7-5】對(duì)【例7-4】中的divide()方法拋出的異常進(jìn)行捕獲。publicclassExample7_5{publicstaticvoidmain(String[]args){
try{intres=divide(4,0);
System.out.println(res);}catch(Exceptione){
e.printStackTrace();
}}publicstaticintdivide(intx,inty)throwsException{intresult=x/y; returnresult; }}7.3throws關(guān)鍵字【例7-6】對(duì)【例7-4】中的調(diào)用方法divide()的異常采用另外一種處理方法:讓main()方法繼續(xù)聲明拋出異常。publicclassExample7_6{publicstaticvoidmain(String[]args)throwsException{intres=divide(4,0);
System.out.println(res);}publicstaticintdivide(intx,inty)throwsException{intresult=x/y; returnresult; }}7.3throws關(guān)鍵字目錄CONTENTS任務(wù)7.1什么是異常任務(wù)7.2try-catch和finally任務(wù)7.3throws關(guān)鍵字任務(wù)7.4throw關(guān)鍵字項(xiàng)目實(shí)施
異常成績(jī)處理項(xiàng)目實(shí)訓(xùn)
教學(xué)時(shí)電腦異常處理的模擬7.4throw關(guān)鍵字JDK中定義了大量的異常類,雖然這些異常類可以描述編程時(shí)出現(xiàn)的大部分異常情況,但是在程序開發(fā)中有可能需要描述程序中特有的異常情況。例如,在對(duì)一個(gè)數(shù)求階乘時(shí),這個(gè)數(shù)不能是負(fù)數(shù)。為了解決這個(gè)問題,Java允許用戶自定義異常類,但自定義的異常類必須繼承自Exception類或其子類。7.4throw關(guān)鍵字下面的代碼自定義了一個(gè)異常類:classFushuExceptionextendsException{
publicFushuException(){super();
}publicFushuException(Stringmessage){super(message);
}}throw關(guān)鍵字用于在方法中聲明拋出異常的實(shí)例對(duì)象,其語法格式如下:throwExceptionObject;【例7-7】通過自定義異常,對(duì)負(fù)數(shù)不能求階乘做出提示。publicclassExample7_7{
publicstaticvoidmain(String[]args){
try{intresult=fact(-2);
System.out.println(result);}catch(FushuExceptione){
System.out.println(e.getMessage());
}}
publicstaticintfact(intx)throwsFushuException{intresult=1;if(x<0)
thrownewFushuException("負(fù)數(shù)不能計(jì)算階乘");else{for(inti=1;i<=x;i++)result=result*i;
}returnresult;
}}7.4throw關(guān)鍵字任務(wù)實(shí)踐7-1銀行余額不足異常【任務(wù)描述】編寫一個(gè)程序,完成在銀行的取款和存款操作。在取款時(shí),若取款大于余額則作為異常進(jìn)行處理。【任務(wù)分析】1.通過任務(wù)描述可知需要定義一個(gè)自定義異常類InsufficientFunds表示賬戶余額不足。2.再定義銀行類Bank,類中包括屬性balance表示余額,方法doDeposit(intmoney)表示存款,方法doWithdraw(intmoney)表示取款,在方法中需要判斷取款的金額moeny是否大于余額balance,當(dāng)大于時(shí),手動(dòng)拋出一個(gè)賬戶余額不足InsufficientFunds異常并對(duì)異常處理。3.測(cè)試類中,用戶可多次辦理業(yè)務(wù),每次辦理的業(yè)務(wù)包括存款、取款、查看余額等。任務(wù)實(shí)踐7-2年齡和性別的異常處理【任務(wù)描述】在person類中,年齡的范圍是1-120歲,性別只能是男或女。當(dāng)給人的年齡和性別賦值時(shí),如果不符合要求則需要拋出異常并處理。【任務(wù)分析】1.自定義年齡異常類和性別異常類。2.Person類中包含name、age、sex三個(gè)成員變量,同時(shí)包含這三個(gè)屬性對(duì)應(yīng)的setter、getter方法。在setAge(intage)方法中,如果參數(shù)age不在1-120之間,則拋出異常并處理。在setSex(charsex)方法中,如果參數(shù)不是'男'或者'女',則拋出異常并處理。3.測(cè)試類中,創(chuàng)建人對(duì)象,分別調(diào)用方法給人對(duì)象的年齡和性別賦值。目錄CONTENTS任務(wù)7.1什么是異常任務(wù)7.2try-catch和finally任務(wù)7.3throws關(guān)鍵字任務(wù)7.4throw關(guān)鍵字項(xiàng)目實(shí)施異常成績(jī)處理項(xiàng)目實(shí)訓(xùn)
教學(xué)時(shí)電腦異常處理的模擬項(xiàng)目實(shí)施項(xiàng)目分析1.考慮到用戶可能輸入各種類型的錯(cuò)誤數(shù)據(jù),在輸入時(shí)可通過Scanner對(duì)象的nextLine()方法讀取用戶輸入的一行內(nèi)容,然后將其轉(zhuǎn)為double型的數(shù)據(jù)。轉(zhuǎn)換過程中,如果Java虛擬機(jī)拋出NumberFormatException,則表示用戶輸入的數(shù)據(jù)類型錯(cuò)誤。例如,輸入的不是數(shù)字字符,或者輸入的數(shù)字字符中夾雜英文字符,這時(shí)輸入內(nèi)容轉(zhuǎn)成double型數(shù)據(jù)會(huì)拋出異常。對(duì)于JVM拋出的這種異常需要處理一下。2.還需要自定義一個(gè)異常類InvalidScoreException,表示不合法的成績(jī)異常。當(dāng)輸入的成績(jī)不是0~100時(shí),手動(dòng)拋出該異常并處理。3.對(duì)于前面拋出的異常,可以通過try-catch語句進(jìn)行捕獲,捕獲之后給用戶相應(yīng)的提示,同時(shí)本次輸入的數(shù)據(jù)無效,需要重新輸入。項(xiàng)目實(shí)施項(xiàng)目實(shí)施關(guān)鍵代碼如下://定義異常類classInvalidScoreExceptionextendsException{ InvalidScoreException(){ super(); } InvalidScoreException(Strings){ super(s); }}項(xiàng)目實(shí)施項(xiàng)目實(shí)施關(guān)鍵代碼如下://測(cè)試類publicclass異常成績(jī)處理{ publicstaticvoidmain(String[]args){ floatscores[]=newfloat[50]; for(inti=0;i<scores.length;i++) { System.out.print("請(qǐng)輸入第"+(i+1)+"個(gè)學(xué)生的成績(jī):"); Scannersc=newScanner(System.in); Stringtemp=sc.nextLine(); try{ floatscore=Float.parseFloat(temp); if(score<0||score>100) thrownewInvalidScoreException("成績(jī)不在0-100之間!"); }catch(NumberFormatExceptione1){ System.out.println("輸入的成績(jī)類型錯(cuò)誤!請(qǐng)重新輸入!"); i--; }catch(InvalidScoreExcep
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(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)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 醫(yī)療安全事件管理辦法
- 保安公司公章管理辦法
- 桐鄉(xiāng)疫情出入管理辦法
- 江蘇公司商旅管理辦法
- 村級(jí)移風(fēng)易俗管理辦法
- 洗煤廠崗位責(zé)任制度與職責(zé)分配
- 金礦液滴形成的微觀機(jī)制及成因研究
- 鹽堿土壤改良與綜合利用技術(shù)研究
- 農(nóng)業(yè)用水收費(fèi)管理辦法
- 佛教協(xié)會(huì)公章管理辦法
- 黨課課件含講稿:《關(guān)于加強(qiáng)黨的作風(fēng)建設(shè)論述摘編》輔導(dǎo)報(bào)告
- 國家開放大學(xué)行管專科《監(jiān)督學(xué)》期末紙質(zhì)考試總題庫2025春期版
- GB/T 4857.4-2008包裝運(yùn)輸包裝件基本試驗(yàn)第4部分:采用壓力試驗(yàn)機(jī)進(jìn)行的抗壓和堆碼試驗(yàn)方法
- GB/T 3280-2015不銹鋼冷軋鋼板和鋼帶
- GB/T 24816-2009起重用短環(huán)鏈吊鏈等用8級(jí)普通精度鏈
- GB/T 17187-2009農(nóng)業(yè)灌溉設(shè)備滴頭和滴灌管技術(shù)規(guī)范和試驗(yàn)方法
- ERAS快速康復(fù)理念在胃腸外科應(yīng)用課件
- 17025檢測(cè)和校準(zhǔn)實(shí)驗(yàn)室認(rèn)可準(zhǔn)則解析
- 工業(yè)廢水處理工(中級(jí)工)理論試題庫匯總-上(單選、多選題)
- 潛水泵操作JSA分析表
- 物理化學(xué)實(shí)驗(yàn):實(shí)驗(yàn)12 膠體的制備和電泳
評(píng)論
0/150
提交評(píng)論