




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
§5-2異常處理Java語言程序設(shè)計(jì)教學(xué)目標(biāo)任務(wù)分析前面我們在錄入學(xué)生信息時發(fā)現(xiàn),用戶如果不能錄入正常信息會導(dǎo)致程序崩潰,我們無法保證用戶每次都能按正確格式錄入,但我們可以通過對用戶可能會出現(xiàn)的問題提前進(jìn)行處理,以保證程序不崩潰。教學(xué)內(nèi)容1聲明異常捕獲異常2throw拋出異常3一、捕獲異常捕獲異常的try-catch-finally語句的其語法格式為:try{//可能會引發(fā)異常的代碼}catch(ExceptionType1e){//對ExceptionType1的處理}catch(ExceptionType2e){//對ExceptionType2的處理}......finally{//該結(jié)構(gòu)并非必須,但如果有,則否發(fā)生了異常,finally語句都會執(zhí)行......//}捕獲異常的第一步是用try{…}選定捕獲異常的范圍,由try所限定的代碼塊中的語句在執(zhí)行過程中可能會生成異常對象并拋棄。一、捕獲異常1.try每個try代碼塊可以伴隨一個或多個catch語句,用于處理try代碼塊中所生成的異常事件。catch語句只需要一個形式參數(shù)來指明它所能夠捕獲的異常類型,這個類必須是Throwable的子類,運(yùn)行時系統(tǒng)通過參數(shù)值把被拋棄的異常對象傳遞給catch塊。①如果try中代碼沒有出現(xiàn)異常,則不會進(jìn)入catch塊。②如果出現(xiàn)異常對象,則會依次與catch塊中的異常類型進(jìn)行驗(yàn)證,是否是屬于該類型的異常,如果是,則進(jìn)入該catch塊,后續(xù)catch塊不再繼續(xù)驗(yàn)證,即不會再執(zhí)行后續(xù)catch塊。如何出現(xiàn)的異常對象不屬于所有catch塊中的異常,則無法捕獲該異常,該異常依然會導(dǎo)致程序崩潰,所以為防止此種情況可以在最后的catch塊設(shè)置捕獲的異常類型為Exception類型。一、捕獲異常2.catch捕獲異常的最后一步是通過finally語句為異常處理提供一個統(tǒng)一的出口,使得在控制流轉(zhuǎn)到程序的其它部分以前,能夠?qū)Τ绦虻臓顟B(tài)做統(tǒng)一的管理。一般是用來關(guān)閉文件或釋放其他的系統(tǒng)資源。雖然finally作為try-catch-finally結(jié)構(gòu)的一部分,但在程序中是可選的,也就是說可以沒有finally語句。如果存在finally語句,不論try塊中是否發(fā)生了異常,是否執(zhí)行過catch語句,都要執(zhí)行finally語句。一、捕獲異常3.finally示例代碼當(dāng)數(shù)組下標(biāo)超界時,捕獲異常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("這行信息總是會打印,無論是否出現(xiàn)異常"); } i++; }}二、聲明異常
當(dāng)Java程序運(yùn)行時系統(tǒng)得到一個異常對象時,如果一個方法并不知道如何處理所出現(xiàn)的異常,則可在方法聲明時,聲明拋棄(throws)異常。如果方法中有可能拋出多個異常,異常列表中要一一列出,各異常之間用逗號隔開。語法如下:修飾符返回類型方法名(參數(shù)列表)throws異常列表{方法體;}如:publicvoidmyMethod()throwsIOException{……}說明:通過使用throws聲明異常的方法,該方法自己不處理本方法中產(chǎn)生的異常,而是由調(diào)用它的方法來處理這些異常。三、throw拋出異常
除程序編譯或運(yùn)行階段系統(tǒng)自動拋出異常外,用戶還可以根據(jù)實(shí)際需求手動通過throw關(guān)鍵字拋出異常。其一般格式為:thrownewXxxException();或
XxxException()ex=newXxxException();throwex;
如果手動拋出的為非運(yùn)行時異常,則throw所在方法必須是通過throws關(guān)鍵字聲明了異常的方法,或使用try-catch對該非運(yùn)行時異常進(jìn)行處理。四、自定義異常
盡管Java提供了相當(dāng)多的異常類,但Exception提供的系統(tǒng)異常并不一定總能捕獲程序中發(fā)生的所有錯誤。當(dāng)用戶遇到了系統(tǒng)預(yù)定義的異常類不能描述的問題時,還需要創(chuàng)建用戶自定義的異常,比如在銀行系統(tǒng)中存錢的數(shù)據(jù)如果小于0即為一種異常現(xiàn)象。
用戶定義的異常必須繼承自Throwable、Exception類或Exception的其他子類。語法: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)建自定義異常對象 BalanceExceptionbalanceException=newBalanceException("存款不能為負(fù)數(shù)"); //拋出異常
throwbalanceException; }else{ System.out.println("存款成功"); } }示例代碼
//在main方法調(diào)用存款方法 publicstaticvoidmain(String[]args){ intbalance; Scannersc=newScanner(System.in); System.out.println("請輸入存款金額:"); balance=sc.nextInt(); //使用try-catch處理BalanceException try{ deposit(balance); }catch(Exceptione){ e.printStackTrace(); } }}
測試輸入金額為正數(shù)和負(fù)數(shù)shi任務(wù)實(shí)施使用try-catch-finally解決因用戶不合理理錄入錯誤而引起的程序崩潰,從而提高程序運(yùn)行的可靠性,實(shí)現(xiàn)步驟如下。1)將可能出現(xiàn)異常的代碼(即輸入學(xué)生年齡部分)放入try代碼塊。2)使用catch代碼塊捕獲Exception。程序開發(fā)階段可以在catch塊中將異常信息通過
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 常熟理工學(xué)院《醫(yī)學(xué)微生物與寄生蟲學(xué)》2023-2024學(xué)年第二學(xué)期期末試卷
- 十堰市茂華中學(xué)2025屆初三下學(xué)期4月月考物理試題含解析
- 上海興偉學(xué)院《新媒體廣告設(shè)計(jì)》2023-2024學(xué)年第二學(xué)期期末試卷
- 廉潔教育提醒課件
- 杭州醫(yī)學(xué)院《電力市場概論》2023-2024學(xué)年第二學(xué)期期末試卷
- 浙江省杭州市西湖區(qū)保俶塔實(shí)驗(yàn)學(xué)校申花路校區(qū)2025年三下數(shù)學(xué)期末統(tǒng)考模擬試題含解析
- 合肥工業(yè)大學(xué)《運(yùn)動生理學(xué)》2023-2024學(xué)年第二學(xué)期期末試卷
- 2025屆上海市曹楊二中高三第二次調(diào)研統(tǒng)一測試歷史試題含解析
- 山西省大同市第三中學(xué)2024-2025學(xué)年高三七校聯(lián)合體考前沖刺交流考試數(shù)學(xué)試題含解析
- 江蘇省常州市新北區(qū)奔牛初級中學(xué)2025年初三十月月考化學(xué)試題試卷含解析
- 股權(quán)激勵實(shí)戰(zhàn)手冊
- 車站作業(yè)計(jì)劃與統(tǒng)計(jì)(第二版)
- 中國傳統(tǒng)飲食文化-《糯米糍粑》的制作與傳統(tǒng)意義
- 河道整治投標(biāo)書完整版(技術(shù)標(biāo))
- 直播電商行業(yè)現(xiàn)狀、問題與未來發(fā)展策略探討
- YBJ-PS03-2004埋地?zé)o壓預(yù)制混凝土排水圓形管管基及接口
- 基本醫(yī)療保險異地就醫(yī)備案個人承諾書【模板】
- 吳俊-血凝學(xué)實(shí)驗(yàn)診斷思路(2014檢驗(yàn)醫(yī)師會議)
- 碘對比劑的安全管理-PPT
- 北京郵電大學(xué)2016年自主招生申請報(bào)告-(完整)
- 盟史簡介12.10.18課件
評論
0/150
提交評論