




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
異常處理1精選2021版課件目標(biāo)理解異常的概念 運用try塊、catch塊和finally塊處理異常運用多重catch塊處理異常運用嵌套try/catch塊處理異常運用關(guān)鍵字throw和throws處理異常運用JAVA編寫和使用自定義異常2精選2021版課件生活中的異常正常情況下但是,異常情況遲早要發(fā)生!一路暢通堵車!撞車!3精選2021版課件程序中的異常publicclassHelloAccp{publicstaticvoidmain(String[]args){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程序中斷運行!正常情況:異常情況:4精選2021版課件什么是異常異常就是在程序的運行過程中所發(fā)生的不正常的事件,它會中斷正在運行的程序繞行或者等待請求交警解決異常!面對異常該怎么辦呢?通常情況下,我們會這樣處理:程序運行程序中斷運行堵車!撞車!生活中,我們會根據(jù)不同的異常進(jìn)行相應(yīng)的處理,而不會就此中斷我們的生活5精選2021版課件ExceptionArithmeticExceptionNullPointerExceptionObjectThrowableErrorThreadDeathSQLExceptionRuntimeExceptionNumberFormatException……異常類的層次結(jié)構(gòu)Throwable具有兩個子類,它們是Exception:處理用戶程序應(yīng)當(dāng)捕獲的異常情況Error:Error類的異常為內(nèi)部錯誤,因此在正常情況下不期望用戶的程序捕獲它們AWTError6精選2021版課件Java異常類文件結(jié)束EOFException找不到文件FileNotFoundExceptionI/O異常的根類IOException數(shù)字轉(zhuǎn)化格式異常,比如字符串到float型數(shù)字的轉(zhuǎn)換無效NumberFormatException不能加載所需的類ClassNotFoundException方法接收到非法參數(shù)IllegalArgumentException數(shù)組大小小于或大于實際的數(shù)組大小ArrayIndexOutOfBoundException嘗試訪問null對象成員NullPointerException許多java.lang異常的基類RuntimeException異常層次結(jié)構(gòu)的根類Exception算術(shù)錯誤情形,如以零作除數(shù)ArithmeticException線程中斷InterruptedException說明異常7精選2021版課件什么是異常處理Java編程語言使用異常處理機制為程序提供了錯誤處理的能力程序中預(yù)先想好了對付異常的處理辦法異常!程序運行處理完畢,程序繼續(xù)運行對異常進(jìn)行處理8精選2021版課件Java中如何進(jìn)行異常處理Java的異常處理是通過5個關(guān)鍵字來實現(xiàn)的:try、catch、finally、throw、throws捕獲異常catchtryfinally執(zhí)行可能產(chǎn)生異常的代碼捕獲異常無論是否發(fā)生異常,代碼總能執(zhí)行手動拋出異常拋出異常throw聲明異常聲明方法可能要拋出的各種異常throws9精選2021版課件異常處理塊的一般形式try{ //要監(jiān)控錯誤的代碼塊}catch(Exceptione){ //Exceptione的異常處理程序}finally{ //在try結(jié)束前要執(zhí)行的代碼塊}10精選2021版課件try/catch塊trycatchtry/catch塊后的代碼段publicvoidmethod(){try{//代碼段(此處不會產(chǎn)生異常)}catch(異常類型ex){//對異常進(jìn)行處理的代碼段}//代碼段}使用try/catch塊捕獲異常,分為三種情況:第一種情況11精選2021版課件try/catch塊7-2使用示例模擬第一種情況:publicclassAccpException{publicstaticvoidmain(String[]args){System.out.print("請輸入1至3之間的數(shù)字:");Scannerin=newScanner(System.in);try{intcourseCode=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("歡迎提出建議!");}}輸入:2Java編程歡迎提出建議!控制臺輸出12精選2021版課件try/catch塊trycatch異常類型匹配try/catch塊后的代碼段進(jìn)入catch塊publicvoidmethod(){try{//代碼段1//產(chǎn)生異常的代碼段2//代碼段3}catch(異常類型ex){//對異常進(jìn)行處理的代碼段4}//代碼段5}使用try/catch塊捕獲異常,分為三種情況:第二種情況產(chǎn)生異常對象程序繼續(xù)執(zhí)行異常是一種特殊的對象,類型為java.lang.Exception或其子類
發(fā)生異常13精選2021版課件try/catch塊7-4使用示例模擬第二種情況:publicclassAccpException{publicstaticvoidmain(String[]args){System.out.print("請輸入1至3之間的數(shù)字:");Scannerin=newScanner(System.in);try{intcourseCode=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ù)字!異常堆棧信息歡迎提出建議!控制臺輸出14精選2021版課件printStackTrace的堆棧跟蹤功能顯示出程序運行到當(dāng)前類的執(zhí)行流程publicclassAccpException{publicstaticvoidmain(String[]args){System.out.print("請輸入課程代號(1至3之間的數(shù)字):");Scannerin=newScanner(System.in);try{intcourseCode=in.nextInt();//此處代碼省略}catch(Exceptionex){System.out.println("輸入不為數(shù)字!");
ex.printStackTrace();}System.out.println("歡迎提出建議!");}}try/catch塊java.util.InputMismatchExceptionatjava.util.Scanner.throwFor(UnknownSource)atjava.util.Scanner.next(UnknownSource)atjava.util.Scanner.nextInt(UnknownSource)atjava.util.Scanner.nextInt(UnknownSource)atHelloAccp.main(HelloAccp.java:8)異常類型異常堆棧信息在此方法中拋出了異常15精選2021版課件try/catch塊trycatch異常類型不匹配try/catch塊后的代碼段程序中斷運行
發(fā)生異常publicvoidmethod(){try{//代碼段1//產(chǎn)生異常的代碼段2//代碼段3}catch(異常類型ex){//對異常進(jìn)行處理的代碼段4}//代碼段5}使用try/catch塊捕獲異常,分為三種情況:第三種情況產(chǎn)生異常對象16精選2021版課件try/catch塊7-7使用示例模擬第三種情況:publicclassAccpException2{publicstaticvoidmain(String[]args){System.out.print("請輸入課程代號(1至3之間的數(shù)字):");Scannerin=newScanner(System.in);try{intcourseCode=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程序中斷運行17精選2021版課件try/catch/finally在try/catch塊后加入finally塊,可以確保無論是否發(fā)生異常,finally塊中的代碼總能被執(zhí)行try塊finally塊catch塊無異常有異常18精選2021版課件try/catch/finally2-2publicclassAccpException3{publicstaticvoidmain(String[]args){System.out.print("請輸入1至3之間的數(shù)字:");Scannerin=newScanner(System.in);try{intcourseCode=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ù)字!");}finally
{System.out.println("歡迎提出建議!");}}}輸入:2Java編程歡迎提出建議!控制臺輸出輸入:abc輸入不為數(shù)字!歡迎提出建議!第一種情況:無異常第二種情況:有異常19精選2021版課件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匹配catchcatch程序繼續(xù)執(zhí)行進(jìn)入catch塊20精選2021版課件多重catch塊2-2publicclassAccpException4{publicstaticvoidmain(String[]args){Scannerin=newScanner(System.in);try{System.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塊21精選2021版課件拋出異常如果在當(dāng)前環(huán)境無法解決一個異常,就要將其拋出,把異常交給調(diào)用者處理publicclassAccpTeacher{privateStringid;//教員編號,長度應(yīng)為7publicvoidsetId(StringpId){//判斷教員編號的長度是否為7if(pId.length()==7){id=pId;}else{thrownewIllegalArgumentException("參數(shù)長度應(yīng)為7!");}}}publicclassAccpTeacherTest{publicstaticvoidmain(String[]args){AccpTeacherteacher=newAccpTeacher();try{teacher.setId("088");}catch(IllegalArgumentExceptionex){System.out.println(ex.getMessage());}}}拋出異常捕獲異常參數(shù)長度應(yīng)為7!控制臺輸出22精選2021版課件聲明異常publicclassAccpTeacher{privateStringid;//教員編號,長度應(yīng)為7publicvoidsetId(StringpId)throwsIllegalArgumentException{//判斷教員編號的長度是否為7if(pId.length()==7){id=pId;}else{thrownewIllegalArgumentException("參數(shù)長度應(yīng)為7!");}}}publicclassAccpTeacherTest{publicstaticvoidmain(String[]args){AccpTeacherteacher=newAccpTeacher();try{teacher.setId("088");}catch(IllegalArgumentExceptionex){System.out.println(ex.getMessage());}}}由調(diào)用者捕獲異常聲明該方法可能會產(chǎn)生異常23精選2021版課件用戶自定義異常自定義異常概念使用自定義異常的時候JavaAPI提供的內(nèi)置異常不一定總能捕獲程序中發(fā)生的所有錯誤。有時會需要創(chuàng)建用戶自定義異常自定義異常需要繼承Exception及其子類24精選2021版課件用戶自定義異常創(chuàng)建一個類繼承Exception或其子類為該異常類添加構(gòu)造方法在一個方法中使用throw拋出異常在另一個方法中捕獲并處理異常classMyExceptionextendsException{ privateinti; MyException(inta){ i=a; } publicStringtoString(){ returni+"大于10啦"; }}25精選2021版課件用戶自定義異常2-3publicclassExceptionDemo{ staticvoidgo(inta)throwsMyException{ System.out.println("a="+a); if(a>10) thrownewMyException(a); System.out.println("正常結(jié)束"); } publicstaticvoidmain(String[]args){ try{ go(
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 菊花種苗購銷合同
- 特許經(jīng)營合同
- 電商運營合作合同協(xié)議書
- 車輛過戶協(xié)議合同
- 建筑施工分包合同書
- 職場裝修合同規(guī)定
- Unit 6 A Day in the Life Section A 1a-Pronunciation教學(xué)設(shè)計2024-2025學(xué)年人教版英語七年級上冊
- 2《丁香結(jié)》教學(xué)設(shè)計2024-2025學(xué)年統(tǒng)編版語文六年級上冊
- 陜西電子信息職業(yè)技術(shù)學(xué)院《寒區(qū)水力計算》2023-2024學(xué)年第二學(xué)期期末試卷
- 山東司法警官職業(yè)學(xué)院《紀(jì)錄片創(chuàng)作與欣賞》2023-2024學(xué)年第二學(xué)期期末試卷
- 《肺部疾病 案例分析-原發(fā)性肺癌》課件
- (高清版)WST 402-2024 臨床實驗室定量檢驗項目參考區(qū)間的制定
- 中英對照版-中文版-The-Dead-By-James-Joyces死者-詹姆斯-喬伊斯
- 清水河儲能電站施工方案設(shè)計
- 低溫絕熱液氧瓶充裝操作規(guī)程模版(2篇)
- (正式版)JBT 11517-2024 刮板取料機
- 大眾汽車使用說明書
- 小學(xué)科學(xué)湘科版五年級下冊全冊教案2023春
- 【冠心病探究文獻(xiàn)綜述2000字】
- 2024年學(xué)校法制副校長工作職責(zé) 法制副校長聘任書(5篇)
- 《鄧稼先》公開課一等獎創(chuàng)新教學(xué)設(shè)計
評論
0/150
提交評論