




版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
項目七異常捕獲【項目描述】實現(xiàn)一個2元計算器,通過命令行選擇功能,要求實現(xiàn)功能如下:1、除法計算工具,通過在客戶端輸入2元計算式,由程序給出結果。2、將10進制數(shù)轉換成2進制或者8進制數(shù)。3、通過輸入半徑計算圓的面積和體積。【任務分解】一個很簡單的項目,不是嗎?相信很多同學已經(jīng)開始自己構造該程序了,任務分解當然也很簡單:先實現(xiàn)計算器的主體方法,接著實現(xiàn)除法計算工具、實現(xiàn)進制轉換工具,最后實現(xiàn)圓的計算工具。我們可通過以下4個任務來到達實現(xiàn)本項目的目的:1.除法計算工具—異常捕獲及處理。2.進制轉換工具--異常拋出。3.進制轉換工具--聲明異常。4.圓的計算工具—自定義異常。//計算器的主體方法:Calculator.javapackageedu.gdkm.cal;importjava.util.Scanner;publicclassCalculator{ publicstaticvoidmain(String[]args){ Scannerscanner=newScanner(System.in); Scannerin=newScanner(System.in); while(true){ System.out.println("請選擇你需要計算的功能:"); System.out.println("0.退出"); System.out.println("1.除法計算"); System.out.println("2.進制換算"); System.out.println("3.圓計算"); System.out.print("你選擇的功能是:");
intnum=in.nextInt(); if(num==0){ System.out.println("謝謝使用,再見!"); System.exit(0); } if(num==1){ System.out.println("請使用‘a(chǎn)/b’的形式輸入計算式"); Stringstr=scanner.nextLine(); intk=str.indexOf('/'); if(k>0){ Stringa=str.substring(0,k); Stringb=str.substring(k+1); Division.d(a,b); } }
本代碼是實現(xiàn)計算器的主體方法,在主方法main()中,用戶可循環(huán)選擇要進行的功能:"0.退出"、"1.除法計算"、"2.進制換算"、"3.圓計算"。根據(jù)用戶選擇的數(shù)字來決定要調(diào)用不同的方法:Division.d(a,b、Conversion.conversion(a,b)和Cpute(r),這幾個類和方法尚未實現(xiàn),要在下面的任務中逐個實現(xiàn)。其中需要定義Division類的靜態(tài)方法d(a,b),用于實現(xiàn)除法計算;定義Conversion類的靜態(tài)方法conversion(a,b),用于實現(xiàn)進制轉換;定義Circle類的compute(r,b)方法,用于實現(xiàn)圓的計算,接下來我們來看一下這三個類如何實現(xiàn)?!救蝿彰枋觥?/p>
實現(xiàn)一個Division類的靜態(tài)方法d(a,b),用于實現(xiàn)除法計算。相信大家都信心滿滿的開始干活了,實現(xiàn)代碼如下:任務一除法計算工具—異常捕獲及處理[必備知識】
1.異常的概念
在Java語言中,異常(Exception)又稱為例外,是指在程序運行過程中發(fā)生的非正常事件,這些事件的發(fā)生會影響程序的正常執(zhí)行,出現(xiàn)異常是相關處理則成為異常處理。
Java定義了異常類的層次結構,從Trowable開始,Error和Exception則繼承于它,而RuntimeException則繼承了Exception。2.異常處理的語法格式
try{
程序代碼1
}catch(異常類1變量名1){
程序代碼2
}catch(異常類2變量名2){
程序代碼3
}finally{
程序代碼4
}【解題思路】1.定義一個Division類,設計方法d(Stringa,Stringb)。2.實現(xiàn)方法d(Stringa,Stringb)時,為避免非法輸入導致的錯誤,在實現(xiàn)除法的部分要使用try-catch語句捕獲并處理NumberFormatException?!救蝿胀肝觥?/p>
packageedu.gdkm.cal;
publicclassDivision{
publicstaticvoidd(Stringa,Stringb){
try{
intx=Integer.parseInt(a);
inty=Integer.parseInt(b);
System.out.println(x/y);
}catch(NumberFormatExceptione){
System.out.println("請輸入數(shù)字!");
}
}
} 運行結果如下:
圖7.4增加異常處理后遇非法輸入時的處理情況【課堂提問】★引起異常產(chǎn)生的條件是什么?★試列出5種常見的異常?★異常沒有被捕獲會發(fā)生什么?【現(xiàn)場演練】嘗試在該除法運算中捕獲除數(shù)不能為零異常。任務二進制轉換工具--異常拋出【任務描述】實現(xiàn)Conversion類的靜態(tài)方法conversion(a,b),用于實現(xiàn)進制轉換,在處理進制轉換基數(shù)時,使用異常拋出機制。【必備知識】1.什么叫拋出異常當程序運行時,如果發(fā)現(xiàn)異常情況,可以按上文所述進行捕獲和處理,也可以通過生成對應異常對象,并將該異常對象傳遞給Java運行時系統(tǒng),使系統(tǒng)中包含該異常信息,這樣的過程稱為拋出異常。在Java中,用關鍵字throw來拋出一個異常。2.拋出異常的語法格式[格式7-1拋出異常的語法格式]throw異常對象;例如: thrownewNullPointerException();當系統(tǒng)執(zhí)行到該throw代碼時,將終止當前方法的執(zhí)行,直接返回到調(diào)用該方法的位置,所以在該方法下面不能直接書寫其他代碼,因為這些代碼將永遠無法執(zhí)行到?!窘忸}思路】 1.定義一個Conversion類,設計方法conversion(Stringa,Stringb)。2.實現(xiàn)方法conversion(Stringa,Stringb),在處理進制轉換基數(shù)時,要使用異常拋出機制?!救蝿胀肝觥?/p>
packageedu.gdkm.cal;publicclassConversion{ publicstaticvoidconversion(Stringa,Stringb){ try{ intx=Integer.parseInt(a); inty=Integer.parseInt(b); if(y!=2&&y!=8){ thrownewIllegalArgumentException("進制參數(shù)非法!"); } StringBuffers=newStringBuffer(); inttemp;
【任務透析】
while(x!=0){ temp=x%y; //取余數(shù) s.insert(0,temp); //添加到字符串緩存區(qū) x/=y; //去掉余數(shù) } System.out.println(s.toString()); }catch(NumberFormatExceptione){ System.out.println("請輸入數(shù)字!"); } }} 通過拋出異常的做法,使得該方法的邏輯更加嚴謹,在出現(xiàn)異常的情況下,將這個異常報告出來,使得該方法不會出現(xiàn)錯誤的結果,同時提醒其他的結構進行處理?!菊n堂提問】★拋出異常會引起程序出現(xiàn)什么情況?★為什么需要拋出異常?【現(xiàn)場演練】 嘗試拋出被轉換的數(shù)字不是自然數(shù)的異常。任務三進制轉換工具--聲明異?!救蝿彰枋觥?/p>
實現(xiàn)Conversion類的靜態(tài)方法conversion(a,b),用于實現(xiàn)進制轉換。要求在定義conversion(a,b)方法時,要用throws去聲明?!颈貍渲R】1.什么叫聲明異常在同樣的任務中,我們可以通過拋出異常來對運行時的錯誤進行報告,從而提醒其他層面的程序對該異常進行處理,但有些時候,我們并不需要處理這些異常,或者不知道如何處理這些異常,這時,它就向上傳遞,由調(diào)用它的方法處理這些異常,為了提醒調(diào)用該方法的程序員注意處理這些異常情況,需要在方法的聲明中將這些異常聲明出來,這就是聲明異常。在Java中用關鍵字throws去聲明異常。2.聲明異常的語法格式聲明異常的語法格式為: throws異常類名例如: publicTest()throwsIllegaArgumentException需要注意的是:1、這些異常必須是該方法內(nèi)部可能拋出的異常。2、異常類名之間沒有順序。3、屬于RuntimeException子類的異常可以不書寫在throws語句以后,但是另外一類異常如果可能拋出則必須聲明在throws語句之后?!窘忸}思路】1.定義一個Conversion類,設計方法conversion(Stringa,Stringb)。2.實現(xiàn)方法conversion(Stringa,Stringb)注意在處理進制轉換基數(shù)時,使用異常拋出機制,并聲明該異常?!救蝿胀肝觥縫ackageedu.gdkm.cal;publicclassConversion{ publicstaticvoidconversion(Stringa,Stringb)throwsIllegalArgumentException{ try{ intx=Integer.parseInt(a); inty=Integer.parseInt(b); if(y!=2&&y!=8){ thrownewIllegalArgumentException("進制參數(shù)非法!"); } StringBuffers=newStringBuffer(); inttemp; while(x!=0){ temp=x%y; //取余數(shù)
s.insert(0,temp); //添加到字符串緩存區(qū) x/=y; //去掉余數(shù) } System.out.println(s.toString()); }catch(NumberFormatExceptione){ System.out.println("請輸入數(shù)字!"); } }} 【課堂提問】★throw和throws關鍵字的區(qū)別是什么?★為什么需要聲明異常?★在任務代碼中,conversion(Stringa,Stringb)方法中的try-catch語句能否省掉?為什么?【現(xiàn)場演練】 嘗試聲明數(shù)字轉換異常NumberFormatException。任務四圓的計算工具—自定義異常?!救蝿彰枋觥?/p>
實現(xiàn)Circle類的靜態(tài)方法compute(a,b),用于實現(xiàn)圓的面積和體積的計算。【必備知識】1.自定義異常在JDK里面提供了幾百個異常類,但是這些異常所代表的還只是常見的異常情況,在實際使用時,還是無法代表所以的異常情況,所以Java語言允許聲明自定義的異常類,使用這些自定義的異常類來代表實際項目中JDK沒有提供的異常情況。2.如何自定義異常自定義異常類在語法上要求直接或者間接繼承Exception,可以根據(jù)需要選擇繼承Exception或者RuntimeException類,這樣也設定了自定義異常類的類型,如果直接繼承Exception,則屬于必須處理的異常,如果繼承的是RuntimeException,則不強制必須被處理。【解題思路】1.定義一個Circle類,設計方法compute(Stringa,Stringb)。2.實現(xiàn)一個自定義異常用于處理圓半徑小于0的情況,在計算的過程中時,使用異常捕獲機制,處理這個異常?!救蝿胀肝觥縫ackageedu.gdkm.cal;publicclassCircle{ publicstaticvoidcompute(Stringstr)throwsRadiusException{ try{ intr=
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年中國2,4-二硝基氟苯數(shù)據(jù)監(jiān)測報告
- 2025至2030年中國防爆電熱棒市場分析及競爭策略研究報告
- 2025至2030年中國鋼帶預力發(fā)條市場分析及競爭策略研究報告
- 2025至2030年中國超聲焊接換能器市場分析及競爭策略研究報告
- 2025至2030年中國腿外分訓練器市場分析及競爭策略研究報告
- 2025至2030年中國精密金屬沖壓零配件市場分析及競爭策略研究報告
- 2025至2030年中國益智用品市場分析及競爭策略研究報告
- 2025至2030年中國環(huán)保智能型銘牌機市場分析及競爭策略研究報告
- 2025至2030年中國氣流噴霧干燥機市場分析及競爭策略研究報告
- 2025至2030年中國智能電量表市場分析及競爭策略研究報告
- 診所托管合同協(xié)議
- 質量檢驗(測)技術服務企業(yè)數(shù)字化轉型與智慧升級戰(zhàn)略研究報告
- 信息必刷卷04(廣東省卷專用)2025年中考數(shù)學(解析版)
- 餐飲服務與管理課件 菜單的設計與制作
- 核電進廠考試題及答案
- 2025年度次季度工業(yè)級5G專網(wǎng)部署技術服務合同模板
- 大數(shù)據(jù)分析在食品檢測精度提高中的應用策略
- 山東師范大學《大學英語本科(專升本)》期末考試復習題及參考答案
- 聲譽風險培訓
- Unit 6 A great week (教學設計)-2024-2025學年外研版(三起)(2024)英語三年級下冊
- 2025版小細胞肺癌免疫治療專家共識解讀
評論
0/150
提交評論