版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
§5-2異常處理Java語(yǔ)言程序設(shè)計(jì)教學(xué)目標(biāo)任務(wù)分析前面我們?cè)阡浫雽W(xué)生信息時(shí)發(fā)現(xiàn),用戶如果不能錄入正常信息會(huì)導(dǎo)致程序崩潰,我們無(wú)法保證用戶每次都能按正確格式錄入,但我們可以通過(guò)對(duì)用戶可能會(huì)出現(xiàn)的問(wèn)題提前進(jìn)行處理,以保證程序不崩潰。教學(xué)內(nèi)容1聲明異常捕獲異常2throw拋出異常3一、捕獲異常捕獲異常的try-catch-finally語(yǔ)句的其語(yǔ)法格式為:try{//可能會(huì)引發(fā)異常的代碼}catch(ExceptionType1e){//對(duì)ExceptionType1的處理}catch(ExceptionType2e){//對(duì)ExceptionType2的處理}......finally{//該結(jié)構(gòu)并非必須,但如果有,則否發(fā)生了異常,finally語(yǔ)句都會(huì)執(zhí)行......//}捕獲異常的第一步是用try{…}選定捕獲異常的范圍,由try所限定的代碼塊中的語(yǔ)句在執(zhí)行過(guò)程中可能會(huì)生成異常對(duì)象并拋棄。一、捕獲異常1.try每個(gè)try代碼塊可以伴隨一個(gè)或多個(gè)catch語(yǔ)句,用于處理try代碼塊中所生成的異常事件。catch語(yǔ)句只需要一個(gè)形式參數(shù)來(lái)指明它所能夠捕獲的異常類型,這個(gè)類必須是Throwable的子類,運(yùn)行時(shí)系統(tǒng)通過(guò)參數(shù)值把被拋棄的異常對(duì)象傳遞給catch塊。①如果try中代碼沒(méi)有出現(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塊中的異常,則無(wú)法捕獲該異常,該異常依然會(huì)導(dǎo)致程序崩潰,所以為防止此種情況可以在最后的catch塊設(shè)置捕獲的異常類型為Exception類型。一、捕獲異常2.catch捕獲異常的最后一步是通過(guò)finally語(yǔ)句為異常處理提供一個(gè)統(tǒng)一的出口,使得在控制流轉(zhuǎn)到程序的其它部分以前,能夠?qū)Τ绦虻臓顟B(tài)做統(tǒng)一的管理。一般是用來(lái)關(guān)閉文件或釋放其他的系統(tǒng)資源。雖然finally作為try-catch-finally結(jié)構(gòu)的一部分,但在程序中是可選的,也就是說(shuō)可以沒(méi)有finally語(yǔ)句。如果存在finally語(yǔ)句,不論try塊中是否發(fā)生了異常,是否執(zhí)行過(guò)catch語(yǔ)句,都要執(zhí)行finally語(yǔ)句。一、捕獲異常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ì)打印,無(wú)論是否出現(xiàn)異常"); } i++; }}二、聲明異常
當(dāng)Java程序運(yùn)行時(shí)系統(tǒng)得到一個(gè)異常對(duì)象時(shí),如果一個(gè)方法并不知道如何處理所出現(xiàn)的異常,則可在方法聲明時(shí),聲明拋棄(throws)異常。如果方法中有可能拋出多個(gè)異常,異常列表中要一一列出,各異常之間用逗號(hào)隔開。語(yǔ)法如下:修飾符返回類型方法名(參數(shù)列表)throws異常列表{方法體;}如:publicvoidmyMethod()throwsIOException{……}說(shuō)明:通過(guò)使用throws聲明異常的方法,該方法自己不處理本方法中產(chǎn)生的異常,而是由調(diào)用它的方法來(lái)處理這些異常。三、throw拋出異常
除程序編譯或運(yùn)行階段系統(tǒng)自動(dòng)拋出異常外,用戶還可以根據(jù)實(shí)際需求手動(dòng)通過(guò)throw關(guān)鍵字拋出異常。其一般格式為:thrownewXxxException();或
XxxException()ex=newXxxException();throwex;
如果手動(dòng)拋出的為非運(yùn)行時(shí)異常,則throw所在方法必須是通過(guò)throws關(guān)鍵字聲明了異常的方法,或使用try-catch對(duì)該非運(yùn)行時(shí)異常進(jìn)行處理。四、自定義異常
盡管Java提供了相當(dāng)多的異常類,但Exception提供的系統(tǒng)異常并不一定總能捕獲程序中發(fā)生的所有錯(cuò)誤。當(dāng)用戶遇到了系統(tǒng)預(yù)定義的異常類不能描述的問(wèn)題時(shí),還需要?jiǎng)?chuàng)建用戶自定義的異常,比如在銀行系統(tǒng)中存錢的數(shù)據(jù)如果小于0即為一種異?,F(xiàn)象。
用戶定義的異常必須繼承自Throwable、Exception類或Exception的其他子類。語(yǔ)法: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("請(qǐng)輸入存款金額:"); balance=sc.nextInt(); //使用try-catch處理BalanceException try{ deposit(balance); }catch(Exceptione){ e.printStackTrace(); } }}
測(cè)試輸入金額為正數(shù)和負(fù)數(shù)shi任務(wù)實(shí)施使用try-catch-finally解決因用戶不合理理錄入錯(cuò)誤而引起的程序崩潰,從而提高程序運(yùn)行的可靠性,實(shí)現(xiàn)步驟如下。1)將可能出現(xiàn)異常的代碼(即輸入學(xué)生年齡部分)放入try代碼塊。2)使用catch代碼塊捕獲Exception。程序開發(fā)階段可以在catch塊中將異常信息通過(guò)
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年三人股東權(quán)益合作范本
- 2024年有機(jī)化肥技術(shù)服務(wù)合同
- 武漢公司債務(wù)還款協(xié)議
- 運(yùn)營(yíng)資金借款協(xié)議書范本
- 饅頭烘焙課程設(shè)計(jì)
- 基金交易服務(wù)合同
- 協(xié)商一致解除勞動(dòng)合同協(xié)議書
- 商鋪?zhàn)赓U合同指南
- 架空絕緣線能帶負(fù)荷查詢表
- 鍵式逐稿器課程設(shè)計(jì)
- 第二單元大單元教學(xué)設(shè)計(jì) 2023-2024學(xué)年統(tǒng)編版高中語(yǔ)文必修上冊(cè)
- 2023年-2024年《高等教育管理學(xué)》考試題庫(kù)(含答案)
- 商業(yè)銀行貸款風(fēng)險(xiǎn)提示
- 事業(yè)單位競(jìng)爭(zhēng)上崗實(shí)施方案
- 生涯發(fā)展報(bào)告
- 工具快換裝置配置介紹
- 2024全國(guó)職業(yè)院校技能大賽ZZ059安全保衛(wèi)賽項(xiàng)規(guī)程+賽題
- 青島版科學(xué)五年級(jí)上冊(cè)全冊(cè)練習(xí)題(含答案)
- 宿舍消防安全知識(shí)課件
- VR游戲設(shè)計(jì)與制作智慧樹知到期末考試答案2024年
- 化療藥物使用及護(hù)理要點(diǎn)
評(píng)論
0/150
提交評(píng)論