Java程序設(shè)計(jì)教程(第三版)課件 項(xiàng)目七 異常捕獲_第1頁
Java程序設(shè)計(jì)教程(第三版)課件 項(xiàng)目七 異常捕獲_第2頁
Java程序設(shè)計(jì)教程(第三版)課件 項(xiàng)目七 異常捕獲_第3頁
Java程序設(shè)計(jì)教程(第三版)課件 項(xiàng)目七 異常捕獲_第4頁
Java程序設(shè)計(jì)教程(第三版)課件 項(xiàng)目七 異常捕獲_第5頁
已閱讀5頁,還剩36頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

項(xiàng)目七異常捕獲【項(xiàng)目描述】實(shí)現(xiàn)一個2元計(jì)算器,通過命令行選擇功能,要求實(shí)現(xiàn)功能如下:1、除法計(jì)算工具,通過在客戶端輸入2元計(jì)算式,由程序給出結(jié)果。2、將10進(jìn)制數(shù)轉(zhuǎn)換成2進(jìn)制或者8進(jìn)制數(shù)。3、通過輸入半徑計(jì)算圓的面積和體積?!救蝿?wù)分解】一個很簡單的項(xiàng)目,不是嗎?相信很多同學(xué)已經(jīng)開始自己構(gòu)造該程序了,任務(wù)分解當(dāng)然也很簡單:先實(shí)現(xiàn)計(jì)算器的主體方法,接著實(shí)現(xiàn)除法計(jì)算工具、實(shí)現(xiàn)進(jìn)制轉(zhuǎn)換工具,最后實(shí)現(xiàn)圓的計(jì)算工具。我們可通過以下4個任務(wù)來到達(dá)實(shí)現(xiàn)本項(xiàng)目的目的:1.除法計(jì)算工具—異常捕獲及處理。2.進(jìn)制轉(zhuǎn)換工具--異常拋出。3.進(jìn)制轉(zhuǎn)換工具--聲明異常。4.圓的計(jì)算工具—自定義異常。//計(jì)算器的主體方法:Calculator.javapackageedu.gdkm.cal;importjava.util.Scanner;publicclassCalculator{ publicstaticvoidmain(String[]args){ Scannerscanner=newScanner(System.in); Scannerin=newScanner(System.in); while(true){ System.out.println("請選擇你需要計(jì)算的功能:"); System.out.println("0.退出"); System.out.println("1.除法計(jì)算"); System.out.println("2.進(jìn)制換算"); System.out.println("3.圓計(jì)算"); 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’的形式輸入計(jì)算式"); Stringstr=scanner.nextLine(); intk=str.indexOf('/'); if(k>0){ Stringa=str.substring(0,k); Stringb=str.substring(k+1); Division.d(a,b); } }

本代碼是實(shí)現(xiàn)計(jì)算器的主體方法,在主方法main()中,用戶可循環(huán)選擇要進(jìn)行的功能:"0.退出"、"1.除法計(jì)算"、"2.進(jìn)制換算"、"3.圓計(jì)算"。根據(jù)用戶選擇的數(shù)字來決定要調(diào)用不同的方法:Division.d(a,b、Conversion.conversion(a,b)和Cpute(r),這幾個類和方法尚未實(shí)現(xiàn),要在下面的任務(wù)中逐個實(shí)現(xiàn)。其中需要定義Division類的靜態(tài)方法d(a,b),用于實(shí)現(xiàn)除法計(jì)算;定義Conversion類的靜態(tài)方法conversion(a,b),用于實(shí)現(xiàn)進(jìn)制轉(zhuǎn)換;定義Circle類的compute(r,b)方法,用于實(shí)現(xiàn)圓的計(jì)算,接下來我們來看一下這三個類如何實(shí)現(xiàn)?!救蝿?wù)描述】

實(shí)現(xiàn)一個Division類的靜態(tài)方法d(a,b),用于實(shí)現(xiàn)除法計(jì)算。相信大家都信心滿滿的開始干活了,實(shí)現(xiàn)代碼如下:任務(wù)一除法計(jì)算工具—異常捕獲及處理[必備知識】

1.異常的概念

在Java語言中,異常(Exception)又稱為例外,是指在程序運(yùn)行過程中發(fā)生的非正常事件,這些事件的發(fā)生會影響程序的正常執(zhí)行,出現(xiàn)異常是相關(guān)處理則成為異常處理。

Java定義了異常類的層次結(jié)構(gòu),從Trowable開始,Error和Exception則繼承于它,而RuntimeException則繼承了Exception。2.異常處理的語法格式

try{

程序代碼1

}catch(異常類1變量名1){

程序代碼2

}catch(異常類2變量名2){

程序代碼3

}finally{

程序代碼4

}【解題思路】1.定義一個Division類,設(shè)計(jì)方法d(Stringa,Stringb)。2.實(shí)現(xiàn)方法d(Stringa,Stringb)時,為避免非法輸入導(dǎo)致的錯誤,在實(shí)現(xiàn)除法的部分要使用try-catch語句捕獲并處理NumberFormatException。【任務(wù)透析】

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ù)字!");

}

}

} 運(yùn)行結(jié)果如下:

圖7.4增加異常處理后遇非法輸入時的處理情況【課堂提問】★引起異常產(chǎn)生的條件是什么?★試列出5種常見的異常?★異常沒有被捕獲會發(fā)生什么?【現(xiàn)場演練】嘗試在該除法運(yùn)算中捕獲除數(shù)不能為零異常。任務(wù)二進(jìn)制轉(zhuǎn)換工具--異常拋出【任務(wù)描述】實(shí)現(xiàn)Conversion類的靜態(tài)方法conversion(a,b),用于實(shí)現(xiàn)進(jìn)制轉(zhuǎn)換,在處理進(jìn)制轉(zhuǎn)換基數(shù)時,使用異常拋出機(jī)制?!颈貍渲R】1.什么叫拋出異常當(dāng)程序運(yùn)行時,如果發(fā)現(xiàn)異常情況,可以按上文所述進(jìn)行捕獲和處理,也可以通過生成對應(yīng)異常對象,并將該異常對象傳遞給Java運(yùn)行時系統(tǒng),使系統(tǒng)中包含該異常信息,這樣的過程稱為拋出異常。在Java中,用關(guān)鍵字throw來拋出一個異常。2.拋出異常的語法格式[格式7-1拋出異常的語法格式]throw異常對象;例如: thrownewNullPointerException();當(dāng)系統(tǒng)執(zhí)行到該throw代碼時,將終止當(dāng)前方法的執(zhí)行,直接返回到調(diào)用該方法的位置,所以在該方法下面不能直接書寫其他代碼,因?yàn)檫@些代碼將永遠(yuǎn)無法執(zhí)行到。【解題思路】 1.定義一個Conversion類,設(shè)計(jì)方法conversion(Stringa,Stringb)。2.實(shí)現(xiàn)方法conversion(Stringa,Stringb),在處理進(jìn)制轉(zhuǎn)換基數(shù)時,要使用異常拋出機(jī)制。【任務(wù)透析】

packageedu.gdkm.cal;publicclassConversion{ publicstaticvoidconversion(Stringa,Stringb){ try{ intx=Integer.parseInt(a); inty=Integer.parseInt(b); if(y!=2&&y!=8){ thrownewIllegalArgumentException("進(jìn)制參數(shù)非法!"); } StringBuffers=newStringBuffer(); inttemp;

【任務(wù)透析】

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ù)字!"); } }} 通過拋出異常的做法,使得該方法的邏輯更加嚴(yán)謹(jǐn),在出現(xiàn)異常的情況下,將這個異常報(bào)告出來,使得該方法不會出現(xiàn)錯誤的結(jié)果,同時提醒其他的結(jié)構(gòu)進(jìn)行處理?!菊n堂提問】★拋出異常會引起程序出現(xiàn)什么情況?★為什么需要拋出異常?【現(xiàn)場演練】 嘗試拋出被轉(zhuǎn)換的數(shù)字不是自然數(shù)的異常。任務(wù)三進(jìn)制轉(zhuǎn)換工具--聲明異?!救蝿?wù)描述】

實(shí)現(xiàn)Conversion類的靜態(tài)方法conversion(a,b),用于實(shí)現(xiàn)進(jìn)制轉(zhuǎn)換。要求在定義conversion(a,b)方法時,要用throws去聲明。【必備知識】1.什么叫聲明異常在同樣的任務(wù)中,我們可以通過拋出異常來對運(yùn)行時的錯誤進(jìn)行報(bào)告,從而提醒其他層面的程序?qū)υ摦惓_M(jìn)行處理,但有些時候,我們并不需要處理這些異常,或者不知道如何處理這些異常,這時,它就向上傳遞,由調(diào)用它的方法處理這些異常,為了提醒調(diào)用該方法的程序員注意處理這些異常情況,需要在方法的聲明中將這些異常聲明出來,這就是聲明異常。在Java中用關(guān)鍵字throws去聲明異常。2.聲明異常的語法格式聲明異常的語法格式為: throws異常類名例如: publicTest()throwsIllegaArgumentException需要注意的是:1、這些異常必須是該方法內(nèi)部可能拋出的異常。2、異常類名之間沒有順序。3、屬于RuntimeException子類的異??梢圆粫鴮懺趖hrows語句以后,但是另外一類異常如果可能拋出則必須聲明在throws語句之后。【解題思路】1.定義一個Conversion類,設(shè)計(jì)方法conversion(Stringa,Stringb)。2.實(shí)現(xiàn)方法conversion(Stringa,Stringb)注意在處理進(jìn)制轉(zhuǎn)換基數(shù)時,使用異常拋出機(jī)制,并聲明該異常。【任務(wù)透析】packageedu.gdkm.cal;publicclassConversion{ publicstaticvoidconversion(Stringa,Stringb)throwsIllegalArgumentException{ try{ intx=Integer.parseInt(a); inty=Integer.parseInt(b); if(y!=2&&y!=8){ thrownewIllegalArgumentException("進(jìn)制參數(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關(guān)鍵字的區(qū)別是什么?★為什么需要聲明異常?★在任務(wù)代碼中,conversion(Stringa,Stringb)方法中的try-catch語句能否省掉?為什么?【現(xiàn)場演練】 嘗試聲明數(shù)字轉(zhuǎn)換異常NumberFormatException。任務(wù)四圓的計(jì)算工具—自定義異常常【任務(wù)描述】

實(shí)現(xiàn)Circle類的靜態(tài)方法compute(a,b),用于實(shí)現(xiàn)圓的面積和體積的計(jì)算。【必備知識】1.自定義異常在JDK里面提供了幾百個異常類,但是這些異常所代表的還只是常見的異常情況,在實(shí)際使用時,還是無法代表所以的異常情況,所以Java語言允許聲明自定義的異常類,使用這些自定義的異常類來代表實(shí)際項(xiàng)目中JDK沒有提供的異常情況。2.如何自定義異常自定義異常類在語法上要求直接或者間接繼承Exception,可以根據(jù)需要選擇繼承Exception或者RuntimeException類,這樣也設(shè)定了自定義異常類的類型,如果直接繼承Exception,則屬于必須處理的異常,如果繼承的是RuntimeException,則不強(qiáng)制必須被處理?!窘忸}思路】1.定義一個Circle類,設(shè)計(jì)方法compute(Stringa,Stringb)。2.實(shí)現(xiàn)一個自定義異常用于處理圓半徑小于0的情況,在計(jì)算的過程中時,使用異常捕獲機(jī)制,處理這個異常?!救蝿?wù)透析】packageedu.gdkm.cal;publicclassCircle{ publicstaticvoidcompute(Stringstr)throwsRadiusException{ try{ intr=

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論