版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、使用異常處理程序錯(cuò)誤第四章1第1頁,共23頁。掌握J(rèn)ava的異常處理機(jī)制運(yùn)用 try 、catch 、 finally 處理異常運(yùn)用 throw 拋出異常運(yùn)用 throws 聲明異常本章目標(biāo)2第2頁,共23頁。生活中的異常正常情況下,小王每日開車去上班,耗時(shí)大約30分鐘但是,異常情況遲早要發(fā)生!一路暢通堵車!撞車!3第3頁,共23頁。程序中的異常public class HelloAccp public static void main(String args) System.out.print(請(qǐng)輸入課程代號(hào)(1至3之間的數(shù)字):);Scanner in = new Scanner(Syst
2、em.in);int courseCode = in.nextInt(); / 從鍵盤輸入整數(shù)switch (courseCode) case 1:System.out.println(C#編程); break;case 2:System.out.println(Java編程); break;case 3:System.out.println(SQL基礎(chǔ)); 輸入:2輸出:Java編程輸入:B程序中斷運(yùn)行!正常情況:異常情況:4第4頁,共23頁。什么是異常異常就是在程序的運(yùn)行過程中所發(fā)生的不正常的事件,它會(huì)中斷正在運(yùn)行的程序繞行或者等待請(qǐng)求交警解決異常!面對(duì)異常該怎么辦呢?通常情況下,我們會(huì)這
3、樣處理:程序運(yùn)行程序中斷運(yùn)行堵車!撞車!生活中,我們會(huì)根據(jù)不同的異常進(jìn)行相應(yīng)的處理,而不會(huì)就此中斷我們的生活5第5頁,共23頁。什么是異常處理Java編程語言使用異常處理機(jī)制為程序提供了錯(cuò)誤處理的能力程序中預(yù)先想好了 對(duì)付異常的處理辦法 異常! 程序運(yùn)行處理完畢,程序繼續(xù)運(yùn)行對(duì)異常進(jìn)行處理6第6頁,共23頁。Java中如何進(jìn)行異常處理Java的異常處理是通過5個(gè)關(guān)鍵字來實(shí)現(xiàn)的:try、catch、 finally、throw、throws 捕獲異常 catchtryfinally執(zhí)行可能產(chǎn)生 異常的代碼 捕獲異常 無論是否發(fā)生異常,代碼總能執(zhí)行手動(dòng)拋出異常 拋出異常 throw聲明異常 聲明方
4、法可能要拋出的各種異常 throws7第7頁,共23頁。try/catch塊7-1trycatch try/catch 塊后的代碼段public void method()try / 代碼段(此處不會(huì)產(chǎn)生異常) catch (異常類型 ex) / 對(duì)異常進(jìn)行處理的代碼段/ 代碼段使用try/catch塊捕獲異常,分為三種情況:第一種情況 8第8頁,共23頁。try/catch塊7-2使用示例模擬第一種情況:public class AccpException public static void main(String args) System.out.print(請(qǐng)輸入課程代號(hào)(1至3之間的
5、數(shù)字):);Scanner in = new Scanner(System.in);try int courseCode = in.nextInt();switch (courseCode) case 1: System.out.println(C#編程); break;case 2: System.out.println(Java編程); break;case 3: System.out.println(SQL基礎(chǔ)); catch (Exception ex) System.out.println(輸入不為數(shù)字!);System.out.println(歡迎提出建議!);輸入:2Java編程
6、歡迎提出建議!控制臺(tái)輸出9第9頁,共23頁。try/catch塊7-3trycatch異常類型匹配 try/catch 塊后的代碼段進(jìn)入catch塊public void method()try / 代碼段 1 / 產(chǎn)生異常的代碼段 2 / 代碼段 3 catch (異常類型 ex) / 對(duì)異常進(jìn)行處理的代碼段4/ 代碼段5使用try/catch塊捕獲異常,分為三種情況:第二種情況 產(chǎn)生異常對(duì)象 程序繼續(xù)執(zhí)行異常是一種特殊的對(duì)象,類型為java.lang.Exception或其子類 發(fā)生異常10第10頁,共23頁。try/catch塊7-4使用示例模擬第二種情況:public class Ac
7、cpException public static void main(String args) System.out.print(請(qǐng)輸入課程代號(hào)(1至3之間的數(shù)字):);Scanner in = new Scanner(System.in);try int courseCode = in.nextInt();switch (courseCode) case 1:System.out.println(C#編程);break;case 2:System.out.println(Java編程);break;case 3:System.out.println(SQL基礎(chǔ)); catch (Excep
8、tion ex) System.out.println(輸入不為數(shù)字!); ex.printStackTrace();System.out.println(歡迎提出建議!);輸入:B輸入不為數(shù)字!異常堆棧信息歡迎提出建議!控制臺(tái)輸出11第11頁,共23頁。printStackTrace的堆棧跟蹤功能顯示出程序運(yùn)行到當(dāng)前類的執(zhí)行流程 public class AccpException public static void main(String args) System.out.print(請(qǐng)輸入課程代號(hào)(1至3之間的數(shù)字):); Scanner in = new Scanner(System
9、.in); try int courseCode = in.nextInt(); /此處代碼省略 catch (Exception ex) System.out.println(輸入不為數(shù)字!); ex.printStackTrace(); System.out.println(歡迎提出建議!); try/catch塊7-5java.util.InputMismatchExceptionat java.util.Scanner.throwFor(Scanner.java:840)at java.util.Scanner.next(Scanner.java:1461)at java.util.S
10、canner.nextInt(Scanner.java:2091)at java.util.Scanner.nextInt(Scanner.java:2050)at s2jsp.sg.ch05.AccpException.main(AccpException.java:23)異常類型異常堆棧信息在此方法中拋出了異常12第12頁,共23頁。try/catch塊7-6trycatch異常類型不匹配 try/catch 塊后的代碼段程序中斷運(yùn)行 發(fā)生異常public void method()try / 代碼段 1 / 產(chǎn)生異常的代碼段 2 / 代碼段 3 catch (異常類型 ex) / 對(duì)異常
11、進(jìn)行處理的代碼段4/ 代碼段5使用try/catch塊捕獲異常,分為三種情況:第三種情況 產(chǎn)生異常對(duì)象 13第13頁,共23頁。try/catch塊7-7使用示例模擬第三種情況:public class AccpException2 public static void main(String args) System.out.print(請(qǐng)輸入課程代號(hào)(1至3之間的數(shù)字):);Scanner in = new Scanner(System.in);try int courseCode = in.nextInt();switch (courseCode) case 1: System.out.
12、println(C#編程); break;case 2: System.out.println(Java編程); break;case 3: System.out.println(SQL基礎(chǔ)); catch (NullPointerException ex) System.out.println(輸入不為數(shù)字!);System.out.println(歡迎提出建議!);輸入:B程序中斷運(yùn)行14第14頁,共23頁。try/catch/finally 2-1在try/catch塊后加入finally塊,可以確保無論是否發(fā)生異常,finally塊中的代碼總能被執(zhí)行try 塊 finally 塊 ca
13、tch 塊 無異常 有異常 15第15頁,共23頁。try/catch/finally 2-2 public class AccpException3 public static void main(String args) System.out.print(請(qǐng)輸入課程代號(hào)(1至3之間的數(shù)字):);Scanner in = new Scanner(System.in);try int courseCode = in.nextInt();switch (courseCode) case 1: System.out.println(C#編程); break;case 2: System.out.p
14、rintln(Java編程); break;case 3: System.out.println(SQL基礎(chǔ)); catch (Exception ex) System.out.println(輸入不為數(shù)字!); finally System.out.println(歡迎提出建議!);輸入:2Java編程歡迎提出建議!控制臺(tái)輸出輸入:B輸入不為數(shù)字!歡迎提出建議!第一種情況:無異常第二種情況:有異常 16第16頁,共23頁。小結(jié) 1編寫一個(gè)類ExceptionTest1,在main方法中使用try、catch、finally:在try塊中,編寫被0除的代碼在catch塊中,捕獲被0除所產(chǎn)生的異
15、常,并且打印異常信息在finally塊中,打印一條語句完整代碼實(shí)現(xiàn)17第17頁,共23頁。public void method()try / 代碼段 / 產(chǎn)生異常(異常類型2) catch (異常類型1 ex) / 對(duì)異常進(jìn)行處理的代碼段 catch (異常類型2 ex) / 對(duì)異常進(jìn)行處理的代碼段 catch (異常類型3 ex) / 對(duì)異常進(jìn)行處理的代碼段/ 代碼段多重catch塊 2-1一段代碼可能會(huì)引發(fā)多種類型的異常當(dāng)引發(fā)異常時(shí),會(huì)按順序來查看每個(gè) catch 語句,并執(zhí)行第一個(gè)與異常類型匹配的catch語句執(zhí)行其中的一條 catch 語句之后,其后的 catch 語句將被忽略 try
16、 與異常類型1不匹配try/catch 塊后的代碼段發(fā)生異常產(chǎn)生異常對(duì)象catch與異常類型2匹配catchcatch程序繼續(xù)執(zhí)行進(jìn)入catch塊18第18頁,共23頁。多重catch塊 2-2public class AccpException4 public static void main(String args) Scanner in = new Scanner(System.in);trySystem.out.print(“請(qǐng)輸入S1的總學(xué)時(shí):);int totalTime = in.nextInt(); /總學(xué)時(shí)System.out.print(“請(qǐng)輸入S1的課程數(shù)目:);int
17、totalCourse = in.nextInt(); /課程數(shù)目System.out.println(“S1各課程的平均學(xué)時(shí)為: + totalTime / totalCourse); catch (InputMismatchException e1) System.out.println(輸入不為數(shù)字!); catch (ArithmeticException e2) System.out.println(課程數(shù)目不能為零!); catch (Exception e) System.out.println(發(fā)生錯(cuò)誤:+e.getMessage();輸入:270 H 在安排catch語句的順
18、序時(shí),首先應(yīng)該捕獲最特殊的異常, 然后再逐漸一般化,即先子類后父類 輸出:輸入不為數(shù)字!進(jìn)入第一個(gè)catch塊輸入:270 0 輸出:課程數(shù)目不能為零!進(jìn)入第二個(gè)catch塊19第19頁,共23頁。拋出異常如果在當(dāng)前環(huán)境無法解決一個(gè)異常,就要將其拋出,把異常交給調(diào)用者處理 public class AccpTeacher private String id; / 教員編號(hào),長(zhǎng)度應(yīng)為7 public void setId(String pId) / 判斷教員編號(hào)的長(zhǎng)度是否為7 if (pId.length() = 7) id = pId; else throw new IllegalArgume
19、ntException(參數(shù)長(zhǎng)度應(yīng)為7!); public class AccpTeacherTest public static void main(String args) AccpTeacher teacher = new AccpTeacher(); try teacher.setId(088); catch (IllegalArgumentException ex) System.out.println(ex.getMessage(); 拋出異常捕獲異常參數(shù)長(zhǎng)度應(yīng)為7!控制臺(tái)輸出20第20頁,共23頁。聲明異常public class AccpTeacher private Stri
20、ng id;/ 教員編號(hào),長(zhǎng)度應(yīng)為7 public void setId(String pId) throws IllegalArgumentException / 判斷教員編號(hào)的長(zhǎng)度是否為7 if (pId.length() = 7) id = pId; else throw new IllegalArgumentException(參數(shù)長(zhǎng)度應(yīng)為7!); public class AccpTeacherTest public static void main(String args) AccpTeacher teacher = new AccpTeacher();try teacher.setId(088); catch (Illegal
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025至2031年中國(guó)干邑白蘭地行業(yè)投資前景及策略咨詢研究報(bào)告
- 2025至2030年中國(guó)聚四氟乙烯液壓板數(shù)據(jù)監(jiān)測(cè)研究報(bào)告
- 2024年股票互換協(xié)議
- 2025年度綠色建筑節(jié)能改造工程承包合同模板2篇
- 2025年度電影院場(chǎng)地租賃合同及觀影安全保障與服務(wù)標(biāo)準(zhǔn)協(xié)議3篇
- 2024版移動(dòng)網(wǎng)絡(luò)業(yè)務(wù)伙伴合同版B版
- 2025年度婚禮場(chǎng)地借用與策劃服務(wù)合同3篇
- 2025年度訴訟保全擔(dān)保流程規(guī)范細(xì)則合同3篇
- 2025年度池塘休閑漁業(yè)項(xiàng)目租賃協(xié)議3篇
- 2025年水土保持監(jiān)測(cè)技術(shù)咨詢與旅游開發(fā)合同3篇
- 定額〔2025〕1號(hào)文-關(guān)于發(fā)布2018版電力建設(shè)工程概預(yù)算定額2024年度價(jià)格水平調(diào)整的通知
- 公共政策學(xué)-陳振明課件
- SHSG0522023年石油化工裝置工藝設(shè)計(jì)包(成套技術(shù))內(nèi)容規(guī)定
- 《運(yùn)營(yíng)管理》案例庫
- 醫(yī)院安全保衛(wèi)部署方案和管理制度
- 我的自我針灸記錄摘錄
- 中醫(yī)學(xué)-五臟-心-課件
- 《駱駝祥子》閱讀記錄卡
- 教育學(xué)原理完整版課件全套ppt教程(最新)
- 醫(yī)療安全不良事件報(bào)告培訓(xùn)PPT培訓(xùn)課件
- 膽管癌的護(hù)理查房
評(píng)論
0/150
提交評(píng)論