




下載本文檔
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、異?;仡櫯c作業(yè)點(diǎn)評(píng)IO操作的類(lèi)都在什么包下?File類(lèi)作用?流的分類(lèi)?說(shuō)說(shuō)字節(jié)流與字符流都有哪些類(lèi)?IO操作會(huì)拋出異常么?本章目標(biāo) 使用try-catch-finally處理異常 使用throw、throws拋出異常 掌握異常及其分類(lèi)正常情況下,小王每日開(kāi)車(chē)去上班,耗時(shí)大約30分鐘但是,異常情況遲早要發(fā)生!一路暢通堵車(chē)!撞車(chē)!生活中的異常 public class Test1 public static void main(String args) Scanner in = new Scanner(System.in);System.out.print(請(qǐng)輸入被除數(shù):);int num1 =
2、in.nextInt();System.out.print(請(qǐng)輸入除數(shù):);int num2 = in.nextInt();System.out.println(String.format(%d / %d = %d, num1, num2, num1/ num2);System.out.println(感謝使用本程序!);輸入:200 40輸入:B正常情況:異常情況:程序中的異常2-1輸入:200 0演示示例:程序中的異常如何解決該問(wèn)題呢?public class Test2 public static void main(String args) Scanner in = new Scann
3、er(System.in);System.out.print(請(qǐng)輸入除數(shù):);int num2 = 0;if (in.hasNextInt() / 如果輸入的除數(shù)是整數(shù)num2 = in.nextInt();if (0 = num2) / 如果輸入的除數(shù)是0System.err.println(輸入的除數(shù)是0,程序退出。);System.exit(1); else / 如果輸入的除數(shù)不是整數(shù)System.err.println(輸入的除數(shù)不是整數(shù),程序退出。);System.exit(1);嘗試通過(guò)if-else來(lái)解決異常問(wèn)題,可行嗎?不可行!1、代碼臃腫 2、程序員要花很大精力堵漏洞“3、程
4、序員很難堵住所有“漏洞”如果由Java系統(tǒng)來(lái)堵漏洞,那程序員就輕松多了!Java就是這么做的!異常機(jī)制程序中的異常2-2異常Exception就是在程序的運(yùn)行過(guò)程中所發(fā)生的不正常的事件,它會(huì)中斷正在運(yùn)行的程序繞行或者等待請(qǐng)求交警解決異常!面對(duì)異常該怎么辦呢?通常情況下,我們會(huì)這樣處理:程序運(yùn)行程序中斷運(yùn)行堵車(chē)!撞車(chē)!生活中,我們會(huì)根據(jù)不同的異常進(jìn)行相應(yīng)的處理,而不會(huì)就此中斷我們的生活什么是異常Java編程語(yǔ)言使用異常處理機(jī)制為程序提供了錯(cuò)誤處理的能力程序中預(yù)先想好了 對(duì)付異常的處理辦法 異常! 程序運(yùn)行處理完畢,程序繼續(xù)運(yùn)行對(duì)異常進(jìn)行處理什么是異常處理Java的異常處理是通過(guò)5個(gè)關(guān)鍵字來(lái)實(shí)現(xiàn)的
5、:try、catch、 finally、throw、throws 捕獲異常 catchtryfinally執(zhí)行可能產(chǎn)生 異常的代碼 捕獲異常 無(wú)論是否發(fā)生異常,代碼總能執(zhí)行手動(dòng)拋出異常 拋出異常 throw聲明異常 聲明方法可能要拋出的各種異常 throwsJava中如何進(jìn)行異常處理trycatch try-catch 塊后的代碼段public void method()try / 代碼段(此處不會(huì)產(chǎn)生異常) catch (異常類(lèi)型 ex) / 對(duì)異常進(jìn)行處理的代碼段/ 代碼段使用try-catch塊捕獲異常,分為三種情況:第一種情況 try-catch塊7-1public class Tes
6、t3 public static void main(String args) try Scanner in = new Scanner(System.in);System.out.print(請(qǐng)輸入被除數(shù):);int num1 = in.nextInt();System.out.print(請(qǐng)輸入除數(shù):);int num2 = in.nextInt();System.out.println(String.format(%d / %d = %d,num1, num2, num1/ num2);System.out.println(感謝使用本程序!); catch (Exception e) S
7、ystem.err.println(出現(xiàn)錯(cuò)誤:被除數(shù)和除數(shù)必須是整數(shù), +除數(shù)不能為零。);e.printStackTrace();try-catch塊7-2使用示例模擬第一種情況:輸入:200 , 40演示示例:使用try-catch處理異常trycatch異常類(lèi)型匹配 try-catch 塊后的代碼段進(jìn)入catch塊public void method()try / 代碼段 1 / 產(chǎn)生異常的代碼段 2 / 代碼段 3 catch (異常類(lèi)型 ex) / 對(duì)異常進(jìn)行處理的代碼段4/ 代碼段5使用try-catch塊捕獲異常,分為三種情況:第二種情況 產(chǎn)生異常對(duì)象 程序繼續(xù)執(zhí)行異常是一種特殊
8、的對(duì)象,類(lèi)型為java.lang.Exception或其子類(lèi) 發(fā)生異常try-catch塊7-3public class Test3 public static void main(String args) try Scanner in = new Scanner(System.in);System.out.print(請(qǐng)輸入被除數(shù):);int num1 = in.nextInt();System.out.print(請(qǐng)輸入除數(shù):);int num2 = in.nextInt();System.out.println(String.format(%d / %d = %d,num1, num2,
9、 num1/ num2);System.out.println(感謝使用本程序!); catch (Exception e) System.err.println(出現(xiàn)錯(cuò)誤:被除數(shù)和除數(shù)必須是整數(shù), +除數(shù)不能為零。);e.printStackTrace();try-catch塊7-4使用示例模擬第二種情況:輸入:B輸入:200,0演示示例:使用try-catch處理異常printStackTrace的堆棧跟蹤功能顯示出程序運(yùn)行到當(dāng)前類(lèi)的執(zhí)行流程 java.util.InputMismatchExceptionat java.util.Scanner.throwFor(Scanner.java
10、:840)at java.util.Scanner.next(Scanner.java:1461)at java.util.Scanner.nextInt(Scanner.java:2091)at java.util.Scanner.nextInt(Scanner.java:2050)at cn.jbit.exception.Test3.main(Test3.java:15)異常類(lèi)型異常堆棧信息在此方法中拋出了異常try-catch塊7-5出現(xiàn)異常的位置trycatch異常類(lèi)型不匹配 try-catch 塊后的代碼段程序中斷運(yùn)行 發(fā)生異常public void method()try / 代碼
11、段 1 / 產(chǎn)生異常的代碼段 2 / 代碼段 3 catch (異常類(lèi)型 ex) / 對(duì)異常進(jìn)行處理的代碼段4/ 代碼段5使用try-catch塊捕獲異常,分為三種情況:第三種情況 產(chǎn)生異常對(duì)象 try-catch塊7-6try-catch塊7-7在catch塊中處理異常加入用戶自定義處理信息調(diào)用異常對(duì)象的方法輸出異常信息e.printStackTrace();System.err.println(出現(xiàn)錯(cuò)誤:被除數(shù)和除數(shù)必須是整數(shù), +除數(shù)不能為零。);方法名說(shuō) 明void printStackTrace()輸出異常的堆棧信息String getMessage()返回異常信息描述字符串,是pr
12、intStackTrace()輸出信息的一部分常見(jiàn)的異常類(lèi)型 方 法 名說(shuō) 明Exception 異常層次結(jié)構(gòu)的根類(lèi)ArithmeticException算術(shù)錯(cuò)誤情形,如以零作除數(shù)ArrayIndexOutOfBoundsException數(shù)組下標(biāo)越界NullPointerException嘗試訪問(wèn) null 對(duì)象成員ClassNotFoundException不能加載所需的類(lèi)InputMismatchException欲得到數(shù)據(jù)類(lèi)型與實(shí)際輸入類(lèi)型不匹配IllegalArgumentException方法接收到非法參數(shù)ClassCastException對(duì)象強(qiáng)制類(lèi)型轉(zhuǎn)換出錯(cuò)NumberForm
13、atException數(shù)字格式轉(zhuǎn)換異常,如把a(bǔ)bc轉(zhuǎn)換成數(shù)字在try-catch塊后加入finally塊,可以確保無(wú)論是否發(fā)生異常,finally塊中的代碼總能被執(zhí)行try 塊 finally 塊 catch 塊 無(wú)異常 有異常 try-catch-finally 3-1public class Test4 public static void main(String args) try Scanner in = new Scanner(System.in);System.out.print(請(qǐng)輸入被除數(shù):);int num1 = in.nextInt();System.out.print(請(qǐng)
14、輸入除數(shù):);int num2 = in.nextInt();System.out.println(String.format(%d / %d = %d,num1, num2, num1/ num2); catch (Exception e) System.err.println(“出現(xiàn)錯(cuò)誤:被除數(shù)和除數(shù)必須是整數(shù), +除數(shù)不能為零。);System.out.println(e.getMessage(); finally System.out.println(感謝使用本程序!);try-catch-finally 3-2輸入:200 40輸入:200 0第一種情況:無(wú)異常第二種情況:有異常 演
15、示示例:使用try-catch-finally處理異常finally塊中語(yǔ)句不執(zhí)行的唯一情況異常處理代碼中執(zhí)行System.exit(1)退出Java虛擬機(jī) try-catch-finally 3-3public class Test5 public static void main(String args) try Scanner in = new Scanner(System.in);System.out.print(請(qǐng)輸入被除數(shù):);int num1 = in.nextInt();System.out.print(請(qǐng)輸入除數(shù):);int num2 = in.nextInt();Syste
16、m.out.println(String.format(%d / %d = %d, num1, num2, num1/ num2); catch (Exception e) System.err.println(出現(xiàn)錯(cuò)誤:被除數(shù)和除數(shù)必須是整數(shù), +除數(shù)不能為零);System.exit(1); / finally語(yǔ)句塊不執(zhí)行的唯一情況 finally System.out.println(感謝使用本程序!);public void method()try / 代碼段 / 產(chǎn)生異常(異常類(lèi)型2) catch (異常類(lèi)型1 ex) / 對(duì)異常進(jìn)行處理的代碼段 catch (異常類(lèi)型2 ex) /
17、 對(duì)異常進(jìn)行處理的代碼段 catch (異常類(lèi)型3 ex) / 對(duì)異常進(jìn)行處理的代碼段/ 代碼段一段代碼可能會(huì)引發(fā)多種類(lèi)型的異常當(dāng)引發(fā)異常時(shí),會(huì)按順序來(lái)查看每個(gè) catch 語(yǔ)句,并執(zhí)行第一個(gè)與異常類(lèi)型匹配的catch語(yǔ)句執(zhí)行其中一條 catch 語(yǔ)句后,其后 catch 語(yǔ)句將被忽略 try 與異常類(lèi)型1不匹配try-catch 塊后的代碼段發(fā)生異常產(chǎn)生異常對(duì)象catch與異常類(lèi)型2匹配catchcatch程序繼續(xù)執(zhí)行進(jìn)入catch塊多重catch塊 2-1多重catch塊 2-2public class Test6 public static void main(String args)
18、try Scanner in = new Scanner(System.in);System.out.print(請(qǐng)輸入被除數(shù):);int num1 = in.nextInt();System.out.print(請(qǐng)輸入除數(shù):);int num2 = in.nextInt();System.out.println(String.format(%d / %d = %d, num1, num2, num1/ num2); catch (InputMismatchException e) System.err.println(被除數(shù)和除數(shù)必須是整數(shù)。); catch (ArithmeticExcep
19、tion e) System.err.println(除數(shù)不能為零。); catch (Exception e) System.err.println(其他未知異常。); 輸入:B 進(jìn)入第一個(gè)catch塊輸入:200 0 進(jìn)入第二個(gè)catch塊在安排catch語(yǔ)句的順序時(shí),首先應(yīng)該捕獲最特殊的異常, 然后再逐漸一般化,即先子類(lèi)后父類(lèi) 演示示例:使用多重catch處理異常練習(xí)根據(jù)編號(hào)輸出課程名稱需求說(shuō)明:按照控制臺(tái)提示輸入13之間任一個(gè)數(shù)字,程序?qū)⑤敵鱿鄳?yīng)的課程名稱根據(jù)鍵盤(pán)輸入進(jìn)行判斷。如果輸入正確,輸出對(duì)應(yīng)課程名稱。如果輸入錯(cuò)誤,給出錯(cuò)誤提示不管輸入是否正確,均輸出“歡迎提出建議”語(yǔ)句完成時(shí)間
20、:20分鐘共性問(wèn)題集中講解常見(jiàn)調(diào)試問(wèn)題及解決辦法代碼規(guī)范問(wèn)題共性問(wèn)題集中講解聲明異常Java語(yǔ)言中通過(guò)throws聲明某個(gè)方法可能拋出的各種異??梢酝瑫r(shí)聲明多個(gè)異常,之間由逗號(hào)隔開(kāi) public class Test7 public static void divide() throws Exception Scanner in = new Scanner(System.in);System.out.print(請(qǐng)輸入被除數(shù):);int num1 = in.nextInt();System.out.print(請(qǐng)輸入除數(shù):);int num2 = in.nextInt();System.out
21、.println(String.format(%d / %d = %d, num1, num2, num1/ num2);public static void main(String args) try divide(); catch (Exception e) e.printStackTrace();/public static void main(String args) throws Exception /divide();/divide()方法沒(méi)有處理異常,而是聲明異常方式1:調(diào)用者通過(guò)try-catch捕獲并處理異常 方式2:調(diào)用者通過(guò)throws繼續(xù)聲明異常 演示示例:使用thro
22、ws聲明異常除了系統(tǒng)自動(dòng)拋出異常外,有些問(wèn)題需要程序員自行拋出異常 public class Person private String name = ;/ 姓名private int age = 0;/ 年齡private String sex = 男;/ 性別public void setSex(String sex) throws Exception if (男.equals(sex) | 女.equals(sex)this.sex = sex;else throw new Exception(性別必須是“男”或者“女”!);public void print() System.out.
23、println( + ( + this.sex + , + this.age + 歲));public class Test8 public static void main(String args) Person person = new Person();try person.setSex(Male);person.print(); catch (Exception e) e.printStackTrace();拋出異常捕獲異常,或者throws異常拋出異常演示示例:使用throw拋出異常異常的分類(lèi)2-1 僅靠程序本身無(wú)法恢復(fù)的嚴(yán)重錯(cuò)誤 Exception和Error類(lèi)的
24、父類(lèi)由Java應(yīng)用程序拋出和處理的非嚴(yán)重錯(cuò)誤 運(yùn)行時(shí)異常,不要求程序必須對(duì)它們做出處理 Checked異常,程序必須處理該類(lèi)異常異常的分類(lèi)2-2public class Test9 public static void main(String args) FileInputStream fis = null;/ 創(chuàng)建指定文件的流。fis = new FileInputStream(new File(accp.txt);/ 關(guān)閉指定文件的流。fis.close();兩種異常均為Checked異常,必須進(jìn)行處理public class Test10 public static void main(String args) FileInputStream fis = null;try fis = new FileInputStream(new File(accp.txt); catch (FileNotFoundException e) System.err.pri
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 健康運(yùn)動(dòng)幼兒托班:助力幼兒快樂(lè)成長(zhǎng)
- 胰島素瘤循證護(hù)理
- 小班保護(hù)五官健康
- 野外生存教育
- 正交試驗(yàn)設(shè)計(jì)方法
- 大學(xué)生體育與心理健康
- 新加坡初等教育體系概覽
- 新生兒肛周膿腫的護(hù)理
- 2025年山東省東營(yíng)市中考招生考試數(shù)學(xué)真題試卷
- 預(yù)防跌倒護(hù)理課件
- 2024年民族宗教政策法規(guī)宣傳月知識(shí)競(jìng)賽考試題庫(kù)(含答案)
- 《3-6歲兒童學(xué)習(xí)與發(fā)展指南》考試參考題庫(kù)120題(含答案)
- 診所中藥飲片清單
- 零信任安全架構(gòu)-第1篇
- 《發(fā)酵飼料的應(yīng)用》課件
- 物業(yè)客服主管的角色與職責(zé)解析
- 國(guó)家開(kāi)放大學(xué)2023年7月期末統(tǒng)一試《22417客戶關(guān)系管理》試題及答案-開(kāi)放專(zhuān)科
- 西式面點(diǎn)師(高級(jí))課件 項(xiàng)目4 甜品制作
- 鼎捷T100-V1.0-銷(xiāo)售管理用戶手冊(cè)-簡(jiǎn)體
- 抗生素的合理應(yīng)用-專(zhuān)業(yè)知識(shí)講座培訓(xùn)課件
- 港式清單模板
評(píng)論
0/150
提交評(píng)論