




已閱讀5頁,還剩23頁未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
.,1,異常處理,.,2,目標(biāo),理解異常的概念運(yùn)用try塊、catch塊和finally塊處理異常運(yùn)用多重catch塊處理異常運(yùn)用嵌套try/catch塊處理異常運(yùn)用關(guān)鍵字throw和throws處理異常運(yùn)用JAVA編寫和使用自定義異常,.,3,生活中的異常,正常情況下,但是,異常情況遲早要發(fā)生!,一路暢通,堵車!,撞車!,.,4,程序中的異常,publicclassHelloAccppublicstaticvoidmain(Stringargs)System.out.print(請輸入1至3之間的數(shù)字:);Scannerin=newScanner(System.in);intcourseCode=in.nextInt();/從鍵盤輸入整數(shù)switch(courseCode)case1:System.out.println(C#編程);break;case2:System.out.println(Java編程);break;case3:System.out.println(SQL基礎(chǔ));,輸入:1輸出:C#編程,輸入:abc程序中斷運(yùn)行!,正常情況:,異常情況:,.,5,什么是異常,異常就是在程序的運(yùn)行過程中所發(fā)生的不正常的事件,它會中斷正在運(yùn)行的程序,繞行或者等待,請求交警解決,異常!,面對異常該怎么辦呢?通常情況下,我們會這樣處理:,程序運(yùn)行,程序中斷運(yùn)行,堵車!,撞車!,生活中,我們會根據(jù)不同的異常進(jìn)行相應(yīng)的處理,而不會就此中斷我們的生活,.,6,Exception,ArithmeticException,NullPointerException,Object,Throwable,Error,ThreadDeath,SQLException,RuntimeException,NumberFormatException,異常類的層次結(jié)構(gòu),Throwable具有兩個子類,它們是Exception:處理用戶程序應(yīng)當(dāng)捕獲的異常情況Error:Error類的異常為內(nèi)部錯誤,因此在正常情況下不期望用戶的程序捕獲它們,AWTError,.,7,Java異常類,文件結(jié)束,EOFException,找不到文件,FileNotFoundException,I/O異常的根類,IOException,數(shù)字轉(zhuǎn)化格式異常,比如字符串到float型數(shù)字的轉(zhuǎn)換無效,NumberFormatException,不能加載所需的類,ClassNotFoundException,方法接收到非法參數(shù),IllegalArgumentException,數(shù)組大小小于或大于實(shí)際的數(shù)組大小,ArrayIndexOutOfBoundException,嘗試訪問null對象成員,NullPointerException,許多java.lang異常的基類,RuntimeException,異常層次結(jié)構(gòu)的根類,Exception,算術(shù)錯誤情形,如以零作除數(shù),ArithmeticException,線程中斷,InterruptedException,說明,異常,.,8,什么是異常處理,Java編程語言使用異常處理機(jī)制為程序提供了錯誤處理的能力,程序中預(yù)先想好了對付異常的處理辦法,異常!,程序運(yùn)行,處理完畢,程序繼續(xù)運(yùn)行,對異常進(jìn)行處理,.,9,Java中如何進(jìn)行異常處理,Java的異常處理是通過5個關(guān)鍵字來實(shí)現(xiàn)的:try、catch、finally、throw、throws,捕獲異常,catch,try,finally,執(zhí)行可能產(chǎn)生異常的代碼,捕獲異常,無論是否發(fā)生異常,代碼總能執(zhí)行,手動拋出異常,拋出異常,throw,聲明異常,聲明方法可能要拋出的各種異常,throws,.,10,異常處理塊的一般形式,try/要監(jiān)控錯誤的代碼塊catch(Exceptione)/Exceptione的異常處理程序finally/在try結(jié)束前要執(zhí)行的代碼塊,.,11,try/catch塊,try,catch,try/catch塊后的代碼段,publicvoidmethod()try/代碼段(此處不會產(chǎn)生異常)catch(異常類型ex)/對異常進(jìn)行處理的代碼段/代碼段,使用try/catch塊捕獲異常,分為三種情況:,第一種情況,.,12,try/catch塊7-2,使用示例模擬第一種情況:,publicclassAccpExceptionpublicstaticvoidmain(Stringargs)System.out.print(請輸入1至3之間的數(shù)字:);Scannerin=newScanner(System.in);tryintcourseCode=in.nextInt();switch(courseCode)case1:System.out.println(C#編程);break;case2:System.out.println(Java編程);break;case3:System.out.println(SQL基礎(chǔ));catch(Exceptionex)System.out.println(輸入不為數(shù)字!);System.out.println(歡迎提出建議!);,輸入:2,Java編程歡迎提出建議!,控制臺輸出,.,13,try/catch塊,try,catch,異常類型匹配,try/catch塊后的代碼段,進(jìn)入catch塊,publicvoidmethod()try/代碼段1/產(chǎn)生異常的代碼段2/代碼段3catch(異常類型ex)/對異常進(jìn)行處理的代碼段4/代碼段5,使用try/catch塊捕獲異常,分為三種情況:,第二種情況,產(chǎn)生異常對象,程序繼續(xù)執(zhí)行,異常是一種特殊的對象,類型為java.lang.Exception或其子類,發(fā)生異常,.,14,try/catch塊7-4,使用示例模擬第二種情況:,publicclassAccpExceptionpublicstaticvoidmain(Stringargs)System.out.print(請輸入1至3之間的數(shù)字:);Scannerin=newScanner(System.in);tryintcourseCode=in.nextInt();switch(courseCode)case1:System.out.println(C#編程);break;case2:System.out.println(Java編程);break;case3:System.out.println(SQL基礎(chǔ));catch(Exceptionex)System.out.println(輸入不為數(shù)字!);ex.printStackTrace();System.out.println(歡迎提出建議!);,輸入:abc,輸入不為數(shù)字!異常堆棧信息歡迎提出建議!,控制臺輸出,.,15,printStackTrace的堆棧跟蹤功能顯示出程序運(yùn)行到當(dāng)前類的執(zhí)行流程,publicclassAccpExceptionpublicstaticvoidmain(Stringargs)System.out.print(請輸入課程代號(1至3之間的數(shù)字):);Scannerin=newScanner(System.in);tryintcourseCode=in.nextInt();/此處代碼省略catch(Exceptionex)System.out.println(輸入不為數(shù)字!);ex.printStackTrace();System.out.println(歡迎提出建議!);,try/catch塊,.,16,try/catch塊,try,catch,異常類型不匹配,try/catch塊后的代碼段,程序中斷運(yùn)行,發(fā)生異常,publicvoidmethod()try/代碼段1/產(chǎn)生異常的代碼段2/代碼段3catch(異常類型ex)/對異常進(jìn)行處理的代碼段4/代碼段5,使用try/catch塊捕獲異常,分為三種情況:,第三種情況,產(chǎn)生異常對象,.,17,try/catch塊7-7,使用示例模擬第三種情況:,publicclassAccpException2publicstaticvoidmain(Stringargs)System.out.print(請輸入課程代號(1至3之間的數(shù)字):);Scannerin=newScanner(System.in);tryintcourseCode=in.nextInt();switch(courseCode)case1:System.out.println(C#編程);break;case2:System.out.println(Java編程);break;case3:System.out.println(SQL基礎(chǔ));catch(NullPointerExceptionex)System.out.println(輸入不為數(shù)字!);System.out.println(歡迎提出建議!);,輸入:abc,程序中斷運(yùn)行,.,18,try/catch/finally,在try/catch塊后加入finally塊,可以確保無論是否發(fā)生異常,finally塊中的代碼總能被執(zhí)行,try塊,finally塊,catch塊,無異常,有異常,.,19,try/catch/finally2-2,publicclassAccpException3publicstaticvoidmain(Stringargs)System.out.print(請輸入1至3之間的數(shù)字:);Scannerin=newScanner(System.in);tryintcourseCode=in.nextInt();switch(courseCode)case1:System.out.println(C#編程);break;case2:System.out.println(Java編程);break;case3:System.out.println(SQL基礎(chǔ));catch(Exceptionex)System.out.println(輸入不為數(shù)字!);finallySystem.out.println(歡迎提出建議!);,輸入:2,Java編程歡迎提出建議!,控制臺輸出,輸入:abc,輸入不為數(shù)字!歡迎提出建議!,第一種情況:無異常,第二種情況:有異常,.,20,publicvoidmethod()try/代碼段/產(chǎn)生異常(異常類型2)catch(異常類型1ex)/對異常進(jìn)行處理的代碼段catch(異常類型2ex)/對異常進(jìn)行處理的代碼段catch(異常類型3ex)/對異常進(jìn)行處理的代碼段/代碼段,多重catch塊2-1,一段代碼可能會引發(fā)多種類型的異常當(dāng)引發(fā)異常時,會按順序來查看每個catch語句,并執(zhí)行第一個與異常類型匹配的catch語句執(zhí)行其中的一條catch語句之后,其后的catch語句將被忽略,try,與異常類型1不匹配,try/catch塊后的代碼段,發(fā)生異常,產(chǎn)生異常對象,catch,與異常類型2匹配,catch,catch,程序繼續(xù)執(zhí)行,進(jìn)入catch塊,.,21,多重catch塊2-2,publicclassAccpException4publicstaticvoidmain(Stringargs)Scannerin=newScanner(System.in);trySystem.out.print(“請輸入S1的總學(xué)時:);inttotalTime=in.nextInt();/總學(xué)時System.out.print(“請輸入S1的課程數(shù)目:);inttotalCourse=in.nextInt();/課程數(shù)目System.out.println(“S1各課程的平均學(xué)時為:+totalTime/totalCourse);catch(InputMismatchExceptione1)System.out.println(輸入不為數(shù)字!);catch(ArithmeticExceptione2)System.out.println(課程數(shù)目不能為零!);catch(Exceptione)System.out.println(發(fā)生錯誤:+e.getMessage();,輸入:270H,在安排catch語句的順序時,首先應(yīng)該捕獲最特殊的異常,然后再逐漸一般化,即先子類后父類,輸出:輸入不為數(shù)字!,進(jìn)入第一個catch塊,輸入:2700,輸出:課程數(shù)目不能為零!,進(jìn)入第二個catch塊,.,22,拋出異常,如果在當(dāng)前環(huán)境無法解決一個異常,就要將其拋出,把異常交給調(diào)用者處理,publicclassAccpTeacherprivateStringid;/教員編號,長度應(yīng)為7publicvoidsetId(StringpId)/判斷教員編號的長度是否為7if(pId.length()=7)id=pId;elsethrownewIllegalArgumentException(參數(shù)長度應(yīng)為7!);,publicclassAccpTeacherTestpublicstaticvoidmain(Stringargs)AccpTeacherteacher=newAccpTeacher();tryteacher.setId(088);catch(IllegalArgumentExceptionex)System.out.println(ex.getMessage();,拋出異常,捕獲異常,參數(shù)長度應(yīng)為7!,控制臺輸出,.,23,聲明異常,publicclassAccpTeacherprivateStringid;/教員編號,長度應(yīng)為7publicvoidsetId(StringpId)throwsIllegalArgumentException/判斷教員編號的長度是否為7if(pId.length()=7)id=pId;elsethrownewIllegalArgumentException(參數(shù)長度應(yīng)為7!);,publicclassAccpTeacherTestpublicstaticvoidmain(Stringargs)AccpTeacherteacher=newAccpTeacher();tryteacher.setId(088);catch(IllegalArgumentExceptionex)System.out.println(ex.getMessage();,由調(diào)用者捕獲異常,聲明該方法可能會產(chǎn)生異常,.,24,用戶自定義異常,自定義異常概念使用自定義異常的時候JavaAPI提供的內(nèi)置異常不一定總能捕獲程序中發(fā)生的所有錯誤。有時會需要創(chuàng)建用戶自定義異常自定義異常需要繼承Exception及其子類,.,25,用戶自定義異常,創(chuàng)建一個類繼承Exception或其子類為該異常類添加構(gòu)造方法在一個方法中使用throw拋出異常在另一個方法中捕獲并處理異常,classMyExceptionextendsExceptionprivateinti;MyException(inta)i=a;publicStringtoString()returni+大于10啦;,.,26,用戶自定義異常2-3,publicclassExceptionDemostaticvoidgo(inta)throwsMyExceptionSystem.out.println(a=+a);if(a10)thrownewMyException(a);System.out.println(正常結(jié)束);publics
溫馨提示
- 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ǎng)與促進(jìn)策略
- picc銷售培訓(xùn)課件
- 重點(diǎn)監(jiān)控藥品培訓(xùn)
- 通風(fēng)設(shè)備培訓(xùn)
- 中班幼兒防電信詐騙安全教育指南
- YY教育模式對比分析與實(shí)踐路徑
- 陽光心理健康成長
- 《婦產(chǎn)科護(hù)理》課件-擊退抑郁陰霾守護(hù)心靈晴空
- 口語實(shí)踐活動方案
- 古詩分享活動方案
- 哮喘的治療與護(hù)理講課件
- 部編版語文五年級下冊全冊復(fù)習(xí)知識匯-總
- 2025年河北地礦中地建設(shè)有限公司招聘筆試參考題庫含答案解析
- 常見護(hù)理工作應(yīng)急預(yù)案及流程
- 湖南省長沙市寧鄉(xiāng)市2024-2025學(xué)年三年級下學(xué)期6月期末科學(xué)試卷(含答案)
- 2025五年級道德與法治下冊期末綜合測試卷(含答案)
- 2025至2030中國房產(chǎn)證抵押貸款行業(yè)市場深度分析及投資與前景預(yù)測報告
- 弱電施工安全技術(shù)交底
- DB21T 3354-2020 遼寧省綠色建筑設(shè)計(jì)標(biāo)準(zhǔn)
- 安全生產(chǎn)知識應(yīng)知應(yīng)會
- 08S305-小型潛水泵選用及安裝圖集
評論
0/150
提交評論