版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第十章 Java的異常處理機(jī)制 本講內(nèi)容 Java異常處理機(jī)制 常見(jiàn)的Java異常類 try/catch/finally/throw/throws的使用 自定義異常 Log4j日志記錄工具的使用 本講目標(biāo) 掌握如何進(jìn)行java異常處理。 try/catch/finally/throw/throws的使用 Log4j日志記錄工具的使用 異常及異常處理 public class Test1 public static void main(String args) Scanner in = new Scanner(System.in); System.out.print(請(qǐng)輸入被除數(shù)請(qǐng)輸入被除數(shù):)
2、; int num1 = in.nextInt(); System.out.print(請(qǐng)輸入除數(shù)請(qǐng)輸入除數(shù):); int num2 = in.nextInt(); System.out.println(String.format(%d / %d = %d, num1, num2, num1/ num2); System.out.println(感謝使用本程序!感謝使用本程序!); 如果由如果由Java系統(tǒng)來(lái)堵漏洞,那程序員系統(tǒng)來(lái)堵漏洞,那程序員 就輕松多了!就輕松多了! Java就是這么做的!就是這么做的!異常機(jī)制異常機(jī)制 異常 異常就是在程序的運(yùn)行過(guò)程中所發(fā)生的不正常的事件, 它會(huì)中斷正在
3、運(yùn)行的程序 Java編程語(yǔ)言使用異常處理機(jī)制為程序提供了錯(cuò)誤處理 的能力 程序中預(yù)先想好了程序中預(yù)先想好了 對(duì)付異常的處理辦法對(duì)付異常的處理辦法 異常!異常! 程序運(yùn)行程序運(yùn)行 處理完畢,程序繼續(xù)運(yùn)行處理完畢,程序繼續(xù)運(yùn)行對(duì)異常進(jìn)行處理對(duì)異常進(jìn)行處理 異常 異常(Exception)是程序執(zhí)行過(guò)程中出現(xiàn)的非正常事件, 即各種意外情況。如: 所需文件找不到 網(wǎng)絡(luò)連接不通或中斷 算術(shù)運(yùn)算錯(cuò) (被零除) 數(shù)組下標(biāo)越界 裝載一個(gè)不存在的類或者對(duì)null對(duì)象操作 類型轉(zhuǎn)換異常 當(dāng)Java程序出現(xiàn)以上的異常時(shí),就會(huì)在所處的方法中產(chǎn) 生一個(gè)異常對(duì)象。這個(gè)異常對(duì)象包括異常的類型,異常 出現(xiàn)時(shí)程序的運(yùn)行狀態(tài)以及
4、對(duì)該異常的詳細(xì)描述。 java異常 java異常 異常是程序中的一些錯(cuò)誤,但并非所有的錯(cuò)誤都是異 常,并且錯(cuò)誤有時(shí)候是可以避免的。 在Java語(yǔ)言中,產(chǎn)生異?,F(xiàn)象的錯(cuò)誤大體分為3 類: 編譯錯(cuò)誤 運(yùn)行錯(cuò)誤 邏輯錯(cuò)誤。 java異常 編譯錯(cuò)誤 編譯錯(cuò)誤是由于所編寫的程序存在語(yǔ)法問(wèn)題,未能通過(guò)由 源代碼到字節(jié)碼的編譯而產(chǎn)生的,它由語(yǔ)言的編譯系統(tǒng)負(fù)責(zé) 檢測(cè)和報(bào)告。此類錯(cuò)誤在編譯的時(shí)候會(huì)被檢查出來(lái),并不會(huì) 生成運(yùn)行代碼,只有更正程序中的語(yǔ)法問(wèn)題后才可以運(yùn)行程 序。常見(jiàn)的有:大小寫混淆 、數(shù)據(jù)類型與變量類型不符、使 用未聲明的變量等 。 java異常 運(yùn)行錯(cuò)誤 運(yùn)行錯(cuò)誤是指程序在執(zhí)行過(guò)程中發(fā)生的錯(cuò)誤,它
5、會(huì)中斷程 序的正常執(zhí)行。例如,計(jì)算時(shí)除數(shù)為零、數(shù)組下標(biāo)越界、文 件沒(méi)找到等。這類錯(cuò)誤在編譯程序時(shí)一般是無(wú)法發(fā)現(xiàn)的。常 見(jiàn)的有:數(shù)組下標(biāo)越界 、除數(shù)為零等 。 java異常 邏輯錯(cuò)誤 邏輯運(yùn)行錯(cuò)誤是指程序不能實(shí)現(xiàn)編程人員的設(shè)計(jì)意圖和設(shè) 計(jì)功能而產(chǎn)生的錯(cuò)誤,即程序運(yùn)行后沒(méi)有得到預(yù)期的結(jié)果。 該類錯(cuò)誤從語(yǔ)法上來(lái)說(shuō)是有效的,只是程序在邏輯上存在著 缺陷。通常,邏輯錯(cuò)誤不會(huì)產(chǎn)生錯(cuò)誤提示信息,所以錯(cuò)誤較 難排除。常見(jiàn)的有:超出數(shù)據(jù)類型的取值范圍 、語(yǔ)句體忘記 加大括號(hào)等 。 如何進(jìn)行異常處理 Java的異常處理是通過(guò)5個(gè)關(guān)鍵字來(lái)實(shí)現(xiàn)的:try、 catch、 finally、throw、throws 捕獲
6、異常捕獲異常 catch try finally 執(zhí)行可能產(chǎn)生執(zhí)行可能產(chǎn)生 異常的代碼異常的代碼 捕獲異常捕獲異常 無(wú)論是否發(fā)生異常,無(wú)論是否發(fā)生異常, 代碼總能執(zhí)行代碼總能執(zhí)行 手動(dòng)拋出異常手動(dòng)拋出異常 拋出異常拋出異常 thro w 聲明異常聲明異常 聲明方法可能要聲明方法可能要 拋出的各種異常拋出的各種異常 throw s 異常處理實(shí)現(xiàn) 由四個(gè)關(guān)鍵字 try、catch、finally和 throws 處理。 Java 中可用于處理異常的兩種方式: 自行處理:可能引發(fā)異常的語(yǔ)句封入在 try 塊內(nèi),而處理 異常的相應(yīng)語(yǔ)句則封入在 catch 塊內(nèi)。即:try-catch- finally
7、語(yǔ)句捕獲異常: try catch( Exception e) finally 回避異常:方法聲明時(shí)用throws聲明方法體內(nèi)有異常 try/catch塊 使用try/catch塊捕獲異常,分為三種情況: try catch public void method() try / 代碼段代碼段(此處不會(huì)產(chǎn)生異常此處不會(huì)產(chǎn)生異常) catch (異常類型異常類型 ex) / 對(duì)異常進(jìn)行處理的代碼段對(duì)異常進(jìn)行處理的代碼段 / 代碼段代碼段 第一種情況第一種情況 try catch try/catch 塊后的代碼段塊后的代碼段 try/catch塊 try catch 異常類型匹配異常類型匹配 try
8、/catch 塊后的代碼段塊后的代碼段 進(jìn)入進(jìn)入catch塊塊 public void method() try / 代碼段代碼段 1 / 產(chǎn)生異常的代碼段產(chǎn)生異常的代碼段 2 / 代碼段代碼段 3 catch (異常類型異常類型 ex) / 對(duì)異常進(jìn)行處理的代碼段對(duì)異常進(jìn)行處理的代碼段4 / 代碼段代碼段5 第二種情況第二種情況 產(chǎn)生異常對(duì)象產(chǎn)生異常對(duì)象 程序繼續(xù)執(zhí)行程序繼續(xù)執(zhí)行 異常是一種特殊的對(duì)象,類型為異常是一種特殊的對(duì)象,類型為 java.lang.Exception或其子類或其子類 發(fā)生異常發(fā)生異常 try/catch塊 try catch 異常類型不匹配異常類型不匹配 try/c
9、atch 塊后的代碼段塊后的代碼段 程序中斷運(yùn)行程序中斷運(yùn)行 發(fā)生異常發(fā)生異常 public void method() try / 代碼段代碼段 1 / 產(chǎn)生異常的代碼段產(chǎn)生異常的代碼段 2 / 代碼段代碼段 3 catch (異常類型異常類型 ex) / 對(duì)異常進(jìn)行處理的代碼段對(duì)異常進(jìn)行處理的代碼段4 / 代碼段代碼段5 第三種情況第三種情況 產(chǎn)生異常對(duì)象產(chǎn)生異常對(duì)象 try/catch/finally塊 在try/catch塊后加入finally塊,可以確保無(wú)論是否發(fā)生異 常,finally塊中的代碼總能被執(zhí)行 try 塊塊 finally 塊塊 catch 塊塊 無(wú)異常無(wú)異常 有異常有
10、異常 異常堆棧信息 printStackTrace的堆棧跟蹤功能顯示出程序運(yùn)行到當(dāng)前類 的執(zhí)行流程 java.util.InputMismatchException at java.util.Scanner.throwFor(Scanner.java: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.m
11、ain(Test3.java:15) 異常類型異常類型 異常堆棧信息異常堆棧信息 在此方法中拋出了異常在此方法中拋出了異常 出現(xiàn)異常的位置出現(xiàn)異常的位置 常見(jiàn)異常類 方 法 名說(shuō) 明 Exception 異常層次結(jié)構(gòu)的根類 ArithmeticException算術(shù)錯(cuò)誤情形,如以零作除數(shù) ArrayIndexOutOfBoundsException數(shù)組下標(biāo)越界 NullPointerException嘗試訪問(wèn) null 對(duì)象成員 ClassNotFoundException不能加載所需的類 InputMismatchException欲得到數(shù)據(jù)類型與實(shí)際輸入類型不匹配 IllegalArgum
12、entException方法接收到非法參數(shù) ClassCastException對(duì)象強(qiáng)制類型轉(zhuǎn)換出錯(cuò) NumberFormatException數(shù)字格式轉(zhuǎn)換異常,如把a(bǔ)bc轉(zhuǎn)換成數(shù)字 僅靠程序本身無(wú)法恢復(fù)僅靠程序本身無(wú)法恢復(fù) 的嚴(yán)重錯(cuò)誤的嚴(yán)重錯(cuò)誤 Exception和和 Error類的父類類的父類 由由Java應(yīng)用程序拋出和處應(yīng)用程序拋出和處 理的非嚴(yán)重錯(cuò)誤理的非嚴(yán)重錯(cuò)誤 運(yùn)行時(shí)異常,不要運(yùn)行時(shí)異常,不要 求程序必須對(duì)它們求程序必須對(duì)它們 做出處理做出處理 Checked異常,程序必須處異常,程序必須處 理該類異常理該類異常 異常的分類 多重catch塊 一段代碼可能會(huì)引發(fā)多種類型的異常,但異
13、常類型必須是層層嵌套 的,即先從子類異常,最后才到父類異常。 當(dāng)引發(fā)異常時(shí),會(huì)按順序來(lái)查看每個(gè) catch 語(yǔ)句,并執(zhí)行第一個(gè)與異 常類型匹配的catch語(yǔ)句 執(zhí)行其中的一條 catch 語(yǔ)句之后,其后的 catch 語(yǔ)句將被忽略 public void method() try / 代碼段代碼段 / 產(chǎn)生異常產(chǎn)生異常(異常類型異常類型2) catch (異常類型異常類型1 ex) / 對(duì)異常進(jìn)行處理的代碼段對(duì)異常進(jìn)行處理的代碼段 catch (異常類型異常類型2 ex) / 對(duì)異常進(jìn)行處理的代碼段對(duì)異常進(jìn)行處理的代碼段 catch (異常類型異常類型3 ex) / 對(duì)異常進(jìn)行處理的代碼段對(duì)異
14、常進(jìn)行處理的代碼段 / 代碼段代碼段 try 與異常類型與異常類型1不匹配不匹配 try/catch 塊后的代碼段塊后的代碼段 發(fā)生異常發(fā)生異常 產(chǎn)生異常對(duì)象產(chǎn)生異常對(duì)象 catch 與異常類型與異常類型2匹配匹配 catch catch 程序繼續(xù)執(zhí)行程序繼續(xù)執(zhí)行 進(jìn)入進(jìn)入catch塊塊 拋出異常 如果在當(dāng)前環(huán)境無(wú)法解決一個(gè)異常,就要將其拋出,把異 常交給調(diào)用者處理 public class Teacher private String id; / 教員編號(hào),長(zhǎng)度應(yīng)為教員編號(hào),長(zhǎng)度應(yīng)為7 public void setId(String pId) / 判斷教員編號(hào)的長(zhǎng)度是否為判斷教員編號(hào)的長(zhǎng)度
15、是否為7 if (pId.length() = 7) id = pId; else throw new IllegalArgumentException(參數(shù)長(zhǎng)度應(yīng)為參數(shù)長(zhǎng)度應(yīng)為7!); public class TeacherTest public static void main(String args) Teacher teacher = new Teacher(); try teacher.setId (088); catch (IllegalArgumentE xception ex) System.out.p rintln(ex.get Message(); 拋出異常拋出異常 捕獲
16、異常捕獲異常 參數(shù)長(zhǎng)度應(yīng)為參數(shù)長(zhǎng)度應(yīng)為7!控制臺(tái)輸出控制臺(tái)輸出 使用log4j記錄日志信息 public class TeacherTest public static void main(String args) Teacher teacher = new Teacher(); try teacher.setId(088); catch (IllegalArgumentException ex) System.out.println(ex.getMessage(); 控制臺(tái)輸出控制臺(tái)輸出 參數(shù)長(zhǎng)度應(yīng)為參數(shù)長(zhǎng)度應(yīng)為7! 如果要在控制臺(tái)與文件如果要在控制臺(tái)與文件 中同時(shí)輸出錯(cuò)誤信息,中同時(shí)輸出錯(cuò)
17、誤信息, 該如何處理?該如何處理? 使用使用log4j可以解決這個(gè)問(wèn)題,可以解決這個(gè)問(wèn)題,log4j是一個(gè)流行的日志記錄工具是一個(gè)流行的日志記錄工具 這是使用這是使用log4j后,存儲(chǔ)在文本文件中的日志信息后,存儲(chǔ)在文本文件中的日志信息 什么是日志 日志:用來(lái)記錄一些重要的操作信息 有價(jià)值的日志數(shù)據(jù)能夠幫助用戶提前發(fā)現(xiàn)和避開(kāi) 災(zāi)難,并且找到事件發(fā)生的原因 public class TeacherTest public static void main(String args) Teacher teacher = new Teacher(); try teacher.setId(088); ca
18、tch (IllegalArgumentException ex) System.out.println(ex.getMessage(); 在控制臺(tái)輸出日志信在控制臺(tái)輸出日志信 息,提示用戶出現(xiàn)錯(cuò)息,提示用戶出現(xiàn)錯(cuò) 誤的原因誤的原因 如何使用log4j記錄日志 項(xiàng)目項(xiàng)目 屬性屬性 :彈出項(xiàng)目的屬性窗口:彈出項(xiàng)目的屬性窗口 第一步:在工程中加入log4j所使用的jar文件 Java構(gòu)建路徑構(gòu)建路徑庫(kù)庫(kù)添加外部添加外部JAR:彈出選擇:彈出選擇JAR的窗口的窗口 通過(guò)選擇通過(guò)選擇JAR的窗口,找到的窗口,找到log4j-1.2.x.jar,并確認(rèn),并確認(rèn) 回到項(xiàng)目的屬性窗口,點(diǎn)擊確定回到項(xiàng)目的屬性
19、窗口,點(diǎn)擊確定 1 2 3 4 如何使用log4j記錄日志 第二步:創(chuàng)建perties文件 選擇欲使用選擇欲使用log4j的項(xiàng)目的項(xiàng)目右鍵點(diǎn)擊右鍵點(diǎn)擊src 新建新建其他其他 :彈出選擇向?qū)Т翱冢簭棾鲞x擇向?qū)Т翱?在選擇向?qū)Т翱谥校x擇常規(guī)在選擇向?qū)Т翱谥?,選擇常規(guī) 文件文件 下一步:彈出新建文件的窗口下一步:彈出新建文件的窗口 在新建文件窗口中,輸入文件名在新建文件窗口中,輸入文件名perties 完成:創(chuàng)建工作結(jié)束完成:創(chuàng)建工作結(jié)束 1 2 3 如何使用log4j記錄日志 第三步:使用log4j記錄日志信息 import org.apache.log4j
20、.Logger; public class TeacherLog4j public static void main(String args) Teacher teacher = new Teacher(); Logger logger = Logger.getLogger(TeacherLog4j.class.getName(); try logger.debug(設(shè)置教員的編號(hào)。設(shè)置教員的編號(hào)。); teacher.setId(088); catch (IllegalArgumentException ex) (ex.getMessage(); 獲取日志記錄器,獲取日
21、志記錄器, 這個(gè)記錄器將負(fù)責(zé)這個(gè)記錄器將負(fù)責(zé) 控制日志信息控制日志信息 使用使用Logger對(duì)象的對(duì)象的 debug、info方法輸方法輸 出日志信息出日志信息 如何使用log4j記錄日志 第四步:編寫perties文件,配置日志信息 # 把日志信息輸出到控制臺(tái)把日志信息輸出到控制臺(tái) # log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.Target=System.out log4j.appender.stdout.layout=org.apache.log4j.Patte
22、rnLayout log4j.appender.stdout.layout.ConversionPattern=%dyyyy-MM-dd HH:mm:ss %m%n # 把日志信息輸出到文件:把日志信息輸出到文件:accp.log # log4j.appender.file=org.apache.log4j.FileAppender log4j.appender.file.File=mylog.log log4j.appender.file.layout=org.apache.log4j.PatternLayout log4j.appender.file.layout.ConversionPa
23、ttern=%dyyyy-MM-dd HH:mm:ss %l %m%n # 設(shè)置優(yōu)先級(jí)別、以及輸出源設(shè)置優(yōu)先級(jí)別、以及輸出源 # log4j.rootLogger=debug, stdout, file 日志信息將寫到文件中日志信息將寫到文件中 指定日志輸出的文件名指定日志輸出的文件名 指定輸出格式:指定輸出格式: 顯示日期和顯示日期和log信息信息 設(shè)置優(yōu)先級(jí)別為設(shè)置優(yōu)先級(jí)別為debug、 日志被輸出到多個(gè)輸出源日志被輸出到多個(gè)輸出源 日志信息將寫到控制臺(tái)日志信息將寫到控制臺(tái) 信息打印到信息打印到System.out上上 指定輸出格式:指定輸出格式: 顯示日期,日志發(fā)生位置顯示日期,日志發(fā)生位置 和日志信息和日志信息 輸出源名稱輸出源名稱 優(yōu)先級(jí)從高到低分別是優(yōu)先級(jí)從高到低分別是ERROR、WARN、INFO、DEBUG 在此處,如果優(yōu)先級(jí)別設(shè)為在此處,如果優(yōu)先級(jí)別設(shè)為info,那么使用,那么使用debug方法打印的日志信息將不被輸出方法打印的日志信息將不被輸出
溫馨提示
- 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è)安全生產(chǎn)施工合同集2篇
- 二零二五年度綠色環(huán)保木工支模項(xiàng)目合同4篇
- 2025版木箱紙箱包裝設(shè)計(jì)創(chuàng)新與市場(chǎng)推廣合同4篇
- 2025年度個(gè)人購(gòu)房合同產(chǎn)權(quán)轉(zhuǎn)移登記流程4篇
- 危險(xiǎn)品運(yùn)輸車輛駕駛員崗前培訓(xùn)考核試卷
- 2025版二零二五年度現(xiàn)代木工清工分包合同模板4篇
- 【新課標(biāo)Ⅲ卷】高三第二次全國(guó)大聯(lián)考語(yǔ)文試卷(含答案)
- 愛(ài)學(xué)習(xí)有自信幼兒舞蹈創(chuàng)編15課件講解
- 2025年專業(yè)期刊發(fā)行協(xié)議
- 2025年合伙勞動(dòng)分工協(xié)議
- 2024公路瀝青路面結(jié)構(gòu)內(nèi)部狀況三維探地雷達(dá)快速檢測(cè)規(guī)程
- 2024年高考真題-地理(河北卷) 含答案
- 中國(guó)高血壓防治指南(2024年修訂版)解讀課件
- 食材配送服務(wù)方案投標(biāo)方案(技術(shù)方案)
- 足療店?duì)I銷策劃方案
- 封條(標(biāo)準(zhǔn)A4打印封條)
- 2024年北京控股集團(tuán)有限公司招聘筆試參考題庫(kù)含答案解析
- 延遲交稿申請(qǐng)英文
- 運(yùn)動(dòng)技能學(xué)習(xí)與控制課件第十章動(dòng)作技能的指導(dǎo)與示范
- 石油天然氣建設(shè)工程交工技術(shù)文件編制規(guī)范(SYT68822023年)交工技術(shù)文件表格儀表自動(dòng)化安裝工程
- 中醫(yī)治療“濕疹”醫(yī)案72例
評(píng)論
0/150
提交評(píng)論