




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
項目7異常處理——異常成績處理《Java程序設計案例教程(微課版)(第2版)》項目導入
在測試學生成績管理系統的成績輸入模塊時,發現輸入不合法的成績時系統會停止運行,因此通過Java中的異常處理機制來確保程序的健壯性。通過這個程序培養學生主動積極面對和解決問題的態度,以應對人生中的各種挑戰。學習目標?掌握異常的概念和體系結構。?掌握異常的兩種處理方式。?掌握自定義異常。
?培養主動積極面對和解決問題的態度。(素養目標)目錄CONTENTS任務7.1什么是異常任務7.2try-catch和finally任務7.3
throws關鍵字項目實施
異常成績處理項目實訓
教學時電腦異常處理的模擬任務7.4
throw關鍵字7.1什么是異常在程序運行過程中,可能會出現一些意外的情況,比如被0除、數組下標越界等。這些意外情況會導致程序出錯或者崩潰,從而影響程序的正常執行。如果不能很好地處理這些意外情況,程序的穩定性就會受到質疑。在Java語言中,這些程序的意外情況稱為異常(exception),出現異常時的處理稱為異常處理。合理的異常處理可以使整個項目更加穩定,也可以使項目中正常的邏輯代碼和錯誤處理的代碼分離,便于代碼的閱讀和維護?!纠?-1】認識訪問數組元素時可能遇到的下標越界異常。publicclassExample7_1{ publicstaticvoidmain(String[]args){inta[]={5,6,7,8};for(inti=0;i<5;i++)System.out.println(a[i]);System.out.println("程序繼續向下執行"); }}7.1什么是異常Java異常類體系架構如圖所示。7.1什么是異常7.1什么是異常所有異常都繼承自java.lang.Throwable類,Throwable類有兩個直接子類,Error類和Exception類。Error類稱為錯誤類,表示Java運行時產生的系統內部錯誤或資源耗盡的錯誤。它表示比較嚴重的錯誤,僅靠修改程序本身是不能恢復執行的。當程序發生這種嚴重錯誤時,通常的做法是通知用戶并終止程序的執行。Exception類稱為異常類,表示程序本身可以處理的錯誤。在Java程序中進行的異常處理都是針對Exception類及其子類的。在Exception類的眾多子類中有一個特殊的子類——RuntimeException類,該類及其子類表示運行時異常。除了此類分支,Exception類下所有其他的子類都用于表示編譯時異常。7.1什么是異常1.運行時異常運行時異常的特點是Java編譯器不會對其進行檢查。也就是說,當程序中出現這類異常時,即使沒有使用try-catch語句捕獲或使用throws關鍵字聲明拋出異常,程序也能編譯通過。運行時異常一般是由程序中的邏輯錯誤引起的,在程序運行時無法恢復。2.編譯時異常編譯時異常的特點是Java編譯器會對其進行檢查,如果出現異常,就必須對異常進行處理,否則程序無法通過編譯。處理編譯時異常有兩種方式,具體方式如下。(1)使用try-catch語句捕獲異常。(2)用throws關鍵字聲明拋出異常,開發人員對其進行處理。目錄CONTENTS任務7.1什么是異常任務7.2try-catch和finally任務7.3
throws關鍵字任務7.4
throw關鍵字項目實施
異常成績處理項目實訓
教學時電腦異常處理的模擬7.2try-catch和finally在程序中由于發生了異常,程序會立即終止,無法繼續向下執行。為了解決這樣的問題,Java提供了一種對異常進行處理的方式——異常捕獲。異常捕獲通過使用try-catch語句來實現,語法格式如下:try{//可能發生異常的程序代碼塊}catch(ExceptionTypee){//處理代碼塊}當try代碼塊中的程序發生異常時,系統會將這個異常的信息封裝成一個異常對象,并將這個對象傳遞給catch代碼塊。【例7-2】使用try-catch語句對【例7-1】中的異常進行捕獲并處理。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("程序繼續向下執行"); }}7.2try-catch和finally【例7-3】對【例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("執行finally代碼塊");}System.out.println("程序繼續向下執行"); }}7.2try-catch和finally目錄CONTENTS任務7.1什么是異常任務7.2try-catch和finally任務7.3throws關鍵字任務7.4
throw關鍵字項目實施
異常成績處理項目實訓
教學時電腦異常處理的模擬7.3throws關鍵字當一個方法產生編譯時異常,而它本身不對這類異常進行處理時,就需要在該方法的頭部聲明拋出這個異常,以便將該異常傳遞到方法的外部進行處理。通過throws關鍵字便可以實現,具體語法格式如下:[修飾符]返回值類型方法名([參數1,參數2,…])throws異常類型1[異常類型2,…]{}其中,throws關鍵字需要寫在方法聲明的后面,throws后面需要聲明方法中發生的異常的類型,通常將這種做法稱為方法聲明拋出一個異常?!纠?-4】使用throws關鍵字聲明拋出異常。publicclassExample7_4{publicstaticvoidmain(String[]args){ intres=divide(4,0);
System.out.println(res);}
publicstaticintdivide(intx,inty)throwsException{intresult=x/y;
returnresult;
}}7.3throws關鍵字【例7-5】對【例7-4】中的divide()方法拋出的異常進行捕獲。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關鍵字【例7-6】對【例7-4】中的調用方法divide()的異常采用另外一種處理方法:讓main()方法繼續聲明拋出異常。publicclassExample7_6{publicstaticvoidmain(String[]args)throwsException{intres=divide(4,0);
System.out.println(res);}publicstaticintdivide(intx,inty)throwsException{intresult=x/y; returnresult; }}7.3throws關鍵字目錄CONTENTS任務7.1什么是異常任務7.2try-catch和finally任務7.3throws關鍵字任務7.4throw關鍵字項目實施
異常成績處理項目實訓
教學時電腦異常處理的模擬7.4throw關鍵字JDK中定義了大量的異常類,雖然這些異常類可以描述編程時出現的大部分異常情況,但是在程序開發中有可能需要描述程序中特有的異常情況。例如,在對一個數求階乘時,這個數不能是負數。為了解決這個問題,Java允許用戶自定義異常類,但自定義的異常類必須繼承自Exception類或其子類。7.4throw關鍵字下面的代碼自定義了一個異常類:classFushuExceptionextendsException{
publicFushuException(){super();
}publicFushuException(Stringmessage){super(message);
}}throw關鍵字用于在方法中聲明拋出異常的實例對象,其語法格式如下:throwExceptionObject;【例7-7】通過自定義異常,對負數不能求階乘做出提示。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("負數不能計算階乘");else{for(inti=1;i<=x;i++)result=result*i;
}returnresult;
}}7.4throw關鍵字任務實踐7-1銀行余額不足異?!救蝿彰枋觥烤帉懸粋€程序,完成在銀行的取款和存款操作。在取款時,若取款大于余額則作為異常進行處理?!救蝿辗治觥?.通過任務描述可知需要定義一個自定義異常類InsufficientFunds表示賬戶余額不足。2.再定義銀行類Bank,類中包括屬性balance表示余額,方法doDeposit(intmoney)表示存款,方法doWithdraw(intmoney)表示取款,在方法中需要判斷取款的金額moeny是否大于余額balance,當大于時,手動拋出一個賬戶余額不足InsufficientFunds異常并對異常處理。3.測試類中,用戶可多次辦理業務,每次辦理的業務包括存款、取款、查看余額等。任務實踐7-2年齡和性別的異常處理【任務描述】在person類中,年齡的范圍是1-120歲,性別只能是男或女。當給人的年齡和性別賦值時,如果不符合要求則需要拋出異常并處理?!救蝿辗治觥?.自定義年齡異常類和性別異常類。2.Person類中包含name、age、sex三個成員變量,同時包含這三個屬性對應的setter、getter方法。在setAge(intage)方法中,如果參數age不在1-120之間,則拋出異常并處理。在setSex(charsex)方法中,如果參數不是'男'或者'女',則拋出異常并處理。3.測試類中,創建人對象,分別調用方法給人對象的年齡和性別賦值。目錄CONTENTS任務7.1什么是異常任務7.2try-catch和finally任務7.3throws關鍵字任務7.4throw關鍵字項目實施異常成績處理項目實訓
教學時電腦異常處理的模擬項目實施項目分析1.考慮到用戶可能輸入各種類型的錯誤數據,在輸入時可通過Scanner對象的nextLine()方法讀取用戶輸入的一行內容,然后將其轉為double型的數據。轉換過程中,如果Java虛擬機拋出NumberFormatException,則表示用戶輸入的數據類型錯誤。例如,輸入的不是數字字符,或者輸入的數字字符中夾雜英文字符,這時輸入內容轉成double型數據會拋出異常。對于JVM拋出的這種異常需要處理一下。2.還需要自定義一個異常類InvalidScoreException,表示不合法的成績異常。當輸入的成績不是0~100時,手動拋出該異常并處理。3.對于前面拋出的異常,可以通過try-catch語句進行捕獲,捕獲之后給用戶相應的提示,同時本次輸入的數據無效,需要重新輸入。項目實施項目實施關鍵代碼如下://定義異常類classInvalidScoreExceptionextendsException{ InvalidScoreException(){ super(); } InvalidScoreException(Strings){ super(s); }}項目實施項目實施關鍵代碼如下://測試類publicclass異常成績處理{ publicstaticvoidmain(String[]args){ floatscores[]=newfloat[50]; for(inti=0;i<scores.length;i++) { System.out.print("請輸入第"+(i+1)+"個學生的成績:"); Scannersc=newScanner(System.in); Stringtemp=sc.nextLine(); try{ floatscore=Float.parseFloat(temp); if(score<0||score>100) thrownewInvalidScoreException("成績不在0-100之間!"); }catch(NumberFormatExceptione1){ System.out.println("輸入的成績類型錯誤!請重新輸入!"); i--; }catch(InvalidScoreExcep
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 廣西崇左圖書館招聘試題帶答案分析2024年
- 5月電網調度自動化廠站端調試檢修員考試模擬題(含參考答案)
- 胎兒護理智能營養配餐系統試卷
- 胎兒護理信息資源整合試卷
- 2025年武漢市漢陽區社區干事崗位招聘考試筆試試題(含答案)
- 智慧課堂背景下數學作業設計有效性分析
- 建筑公司施工車輛進出管理登記制度
- 建筑公司關聯交易定價合理性審查制度
- 勘探工地質數據庫建設考試試卷
- 2024上海工商職業技術學院輔導員招聘筆試真題
- 軍隊政治工作概述
- 裝表接電培訓課件
- 四年級數學下冊計算題(每日一練)
- 小學奧數《-圖形推理》練習題及答案(A)
- 電大《倉儲與配送管理》期末機考題庫
- 職業教育法考試題庫附完整答案【歷年真題】
- 口腔種植技術課件
- DB32T3795-2020企事業單位和工業園區突發環境事件應急預案編制導則
- 道家養生活動方案
- 顱腦手術的麻醉管理
- 團結友愛互幫互助主題班會課件
評論
0/150
提交評論