版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、使用異常處理程序錯誤,第十五講,2,回顧,什么是常量?Java中,常量的定義規(guī)則有哪些?什么是面向接口編程,它的好處是什么?,3,預習檢查,什么是異常?Java中,如何進行異常處理?請說明throw 與 throws的區(qū)別與聯(lián)系?,4,本章任務,升級Hello,完成如下功能:根據(jù)課程代碼輸出課程名稱輸出各學期平均課時等信息使用log4j記錄異常日志,5,掌握Java的異常處理機制運用 try 、catch 、 final
2、ly 處理異常運用 throw 拋出異常運用 throws 聲明異常掌握log4j的用法,能夠記錄異常日志,本章目標,6,生活中的異常,正常情況下,小王每日開車去上班,耗時大約30分鐘,但是,異常情況遲早要發(fā)生!,一路暢通,,堵車!,撞車!,7,程序中的異常,public class Hello {public static void main(String[] args) {System.out.print("請輸
3、入課程代號(1至3之間的數(shù)字):");Scanner in = new Scanner(System.in);int courseCode = in.nextInt(); // 從鍵盤輸入整數(shù)switch (courseCode) {case 1:System.out.println("C#編程"); break;case 2:System.out.println("Java編程&
4、quot;); break;case 3:System.out.println("SQL基礎"); }}},輸入:2輸出:Java編程,輸入:B程序中斷運行!,正常情況:,異常情況:,8,什么是異常,異常就是在程序的運行過程中所發(fā)生的不正常的事件,它會中斷正在運行的程序,繞行或者等待,請求交警解決,異常!,面對異常該怎么辦呢?通常情況下,我們會這樣處理:,程序運行,程序中斷運行,,堵車!,撞車!,生活
5、中,我們會根據(jù)不同的異常進行相應的處理,而不會就此中斷我們的生活,9,什么是異常處理,Java語言使用異常處理機制為程序提供了錯誤處理的能力,程序中預先想好了 對付異常的處理辦法,異常!,程序運行,處理完畢,程序繼續(xù)運行,對異常進行處理,10,Java中如何進行異常處理,Java的異常處理是通過5個關鍵字來實現(xiàn)的:try、catch、 finally、throw、throws,捕獲異常,catch,try,finally,執(zhí)行可能產(chǎn)生
6、 異常的代碼,捕獲異常,無論是否發(fā)生異常,代碼總能執(zhí)行,手動拋出異常,拋出異常,throw,聲明異常,聲明方法可能要拋出的各種異常,throws,11,try/catch塊7-1,,try,catch,try/catch 塊后的代碼段,public void method(){try { // 代碼段(此處不會產(chǎn)生異常)} catch (異常類型 ex) { // 對異常進行處理的代碼段}// 代碼
7、段},使用try/catch塊捕獲異常,分為三種情況:,,,第一種情況,,12,try/catch塊7-2,使用示例模擬第一種情況:,public class Exception {public static void main(String[] args) {System.out.print("請輸入課程代號(1至3之間的數(shù)字):");Scanner in = new Scanner(System.in);
8、try {int courseCode = in.nextInt();switch (courseCode) {case 1: System.out.println("C#編程"); break;case 2: System.out.println("Java編程"); break;case 3:
9、 System.out.println("SQL基礎");}} catch (Exception ex) { System.out.println("輸入不為數(shù)字!");}System.out.println("歡迎提出建議!");}},輸入:2,Java編程歡迎提出建議!,控制臺輸出,13,try/catch塊7-3,,try,catch,
10、異常類型匹配,,try/catch 塊后的代碼段,進入catch塊,public void method(){try { // 代碼段 1 // 產(chǎn)生異常的代碼段 2 // 代碼段 3} catch (異常類型 ex) { // 對異常進行處理的代碼段4}// 代碼段5},使用try/catch塊捕獲異常,分為三種情況:,,,,,第二種情況,產(chǎn)生異常對象,程序繼續(xù)執(zhí)行,異常是一種
11、特殊的對象,類型為java.lang.Exception或其子類,,發(fā)生異常,14,try/catch塊7-4,使用示例模擬第二種情況:,public class Exception {public static void main(String[] args) {System.out.print("請輸入課程代號(1至3之間的數(shù)字):");Scanner in = new Scanner(System.in)
12、;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基礎
13、");}} catch (Exception ex) { System.out.println("輸入不為數(shù)字!"); ex.printStackTrace();}System.out.println("歡迎提出建議!");}},輸入:B,輸入不為數(shù)字!異常堆棧信息歡迎提出建議!,控制臺輸出,15,printStackTrace的堆棧跟蹤功
14、能顯示出程序運行到當前類的執(zhí)行流程,public class Exception { public static void main(String[] args) { System.out.print("請輸入課程代號(1至3之間的數(shù)字):"); Scanner in = new Scanner(System.in); try { int cours
15、eCode = in.nextInt(); //此處代碼省略 } catch (Exception ex) { System.out.println("輸入不為數(shù)字!"); ex.printStackTrace(); } System.out.println("歡迎提出建議!");
16、 }},try/catch塊7-5,16,try/catch塊7-6,,try,catch,異常類型不匹配,try/catch 塊后的代碼段,程序中斷運行,發(fā)生異常,public void method(){try { // 代碼段 1 // 產(chǎn)生異常的代碼段 2 // 代碼段 3} catch (異常類型 ex) { // 對異常進行處理的代碼段4}// 代碼段5},使用try/c
17、atch塊捕獲異常,分為三種情況:,,,第三種情況,產(chǎn)生異常對象,,,17,try/catch塊7-7,使用示例模擬第三種情況:,public class Exception2 {public static void main(String[] args) {System.out.print("請輸入課程代號(1至3之間的數(shù)字):");Scanner in = new Scanner(System.in);t
18、ry {int courseCode = in.nextInt();switch (courseCode) {case 1: System.out.println("C#編程"); break;case 2: System.out.println("Java編程"); break;case 3:
19、 System.out.println("SQL基礎");}} catch (NullPointerException ex) { System.out.println("輸入不為數(shù)字!");}System.out.println("歡迎提出建議!");}},輸入:B,程序中斷運行,,18,try/catch/finally 2-1,在try/ca
20、tch塊后加入finally塊,可以確保無論是否發(fā)生異常,finally塊中的代碼總能被執(zhí)行,try 塊,finally 塊,catch 塊,,,無異常,有異常,,19,try/catch/finally 2-2,public class Exception3 {public static void main(String[] args) {System.out.print("請輸入課程代號(1至3之間的數(shù)字):"
21、;);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編
22、程"); break;case 3: System.out.println("SQL基礎");}} catch (Exception ex) { System.out.println("輸入不為數(shù)字!");} finally { System.out.println("歡迎提出建議!");
23、}}},輸入:2,Java編程歡迎提出建議!,控制臺輸出,輸入:B,輸入不為數(shù)字!歡迎提出建議!,第一種情況:無異常,第二種情況:有異常,20,小結(jié) 1,編寫一個類ExceptionTest1,在main方法中使用try、catch、finally:在try塊中,編寫被0除的代碼在catch塊中,捕獲被0除所產(chǎn)生的異常,并且打印異常信息在finally塊中,打印一條語句,21,public void method(){
24、try { // 代碼段 // 產(chǎn)生異常(異常類型2)} catch (異常類型1 ex) { // 對異常進行處理的代碼段} catch (異常類型2 ex) { // 對異常進行處理的代碼段} catch (異常類型3 ex) { // 對異常進行處理的代碼段}// 代碼段},多重catch塊 2-1,一段代碼可能會引發(fā)多種類型的異常當引發(fā)異常時,會按順序來查看每個
25、catch 語句,并執(zhí)行第一個與異常類型匹配的catch語句執(zhí)行其中的一條 catch 語句之后,其后的 catch 語句將被忽略,,try,與異常類型1不匹配,try/catch 塊后的代碼段,發(fā)生異常,,,產(chǎn)生異常對象,catch,與異常類型2匹配,catch,catch,,程序繼續(xù)執(zhí)行,,,,,進入catch塊,22,多重catch塊 2-2,public class Exception4 {public static voi
26、d main(String[] args) {Scanner in = new Scanner(System.in);try{System.out.print(“請輸入S1的總學時:");int totalTime = in.nextInt(); //總學時System.out.print(“請輸入S1的課程數(shù)目:");int totalCourse = in.nextInt();
27、 //課程數(shù)目System.out.println(“S1各課程的平均學時為:" + totalTime / totalCourse);} catch (InputMismatchException e1) {System.out.println("輸入不為數(shù)字!");} catch (ArithmeticExcepti
28、on e2) {System.out.println("課程數(shù)目不能為零!");} catch (Exception e) {System.out.println("發(fā)生錯誤:"+e.getMessage());}}},輸入:270 H,在安排catch語句的順序時,首先應該捕獲最特殊的異常, 然后再逐漸一般化,即先子類后父類,輸出:輸入不為數(shù)字!,進入第一個catch塊,輸入:
29、270 0,輸出:課程數(shù)目不能為零!,進入第二個catch塊,23,拋出異常,如果在當前環(huán)境無法解決一個異常,就要將其拋出,把異常交給調(diào)用者處理,public class Teacher { private String id; // 教員編號,長度應為7 public void setId(String pId){ // 判斷教員編號的長度是否為7 if (pId.length() == 7) {
30、id = pId; } else {throw new IllegalArgumentException("參數(shù)長度應為7!"); } }},拋出異常:在不使用try、catch語句或throws的前提下,只可以拋出運行時異常對象RuntimeException或其子類對象,如:NullPointerException、IllegalArgumentException等,public class A
31、ccpTeacherTest { public static void main(String[] args) { AccpTeacher teacher = new AccpTeacher(); try {teacher.setId("088"); } catch (IllegalArgumentException ex) {System.out.println(ex.getMessage());
32、 } }},捕獲異常,參數(shù)長度應為7!,控制臺輸出,24,聲明異常,public class Teacher { private String id;// 教員編號,長度應為7 public void setId(String pId) throws IllegalArgumentException{ // 判斷教員編號的長度是否為7 if (pId.length() == 7) {id = pId;
33、 } else {throw new IllegalArgumentException("參數(shù)長度應為7!"); } }},public class TeacherTest { public static void main(String[] args) {AccpTeacher teacher = new AccpTeacher();try {teacher.setId("0
34、88");} catch (IllegalArgumentException ex) {System.out.println(ex.getMessage());} }},由調(diào)用者捕獲異常,聲明該方法可能會產(chǎn)生異常,25,小結(jié) 2,編寫類ExceptionTest2:定義兩個方法:go()和main() 在go方法中聲明要拋出異常,在該方法體內(nèi),拋出一個Exception對象在main()方法中,調(diào)用go方
35、法,使用try/catch捕獲go方法中拋出的異常,26,使用log4j記錄日志信息,public class TeacherTest { public static void main(String[] args) {Teacher teacher = new Teacher(); try {teacher.setId("088"); } catch (IllegalArgumentExceptio
36、n ex) {System.out.println(ex.getMessage()); } }},控制臺輸出,參數(shù)長度應為7!,如果想把錯誤信息保存到文件中,該如何處理?,使用log4j可以解決這個問題,log4j是一個流行的日志記錄工具,這是使用log4j后,存儲在文本文件中的日志信息,27,什么是日志,日志:用來記錄一些重要的操作信息有價值的日志數(shù)據(jù)能夠幫助用戶提前發(fā)現(xiàn)和避免災難,并且找到事件發(fā)生的原因,public
37、 class TeacherTest { public static void main(String[] args) {Teacher teacher = new Teacher(); try { teacher.setId("088"); } catch (IllegalArgumentException ex) { System.out.println(ex.getMess
38、age()); } }},在控制臺輸出日志信息,提示用戶出現(xiàn)錯誤的原因,28,如何使用log4j記錄日志,項目 ? 屬性 :彈出項目的屬性窗口,第一步:在工程中加入log4j所使用的jar文件,Java構建路徑?庫?添加外部JAR:彈出選擇JAR的窗口,通過選擇JAR的窗口,找到log4j-1.2.x.jar,并確認,回到項目的屬性窗口,點擊確定,1,2,3,4,演示:在工程中加入log4j所使用的jar文件,29
39、,如何使用log4j記錄日志,第二步:創(chuàng)建log4j.properties文件,選擇欲使用log4j的項目?右鍵點擊src ?新建?其他 :彈出選擇向?qū)Т翱?在選擇向?qū)Т翱谥校x擇常規(guī)? 文件? 下一步:彈出新建文件的窗口,在新建文件窗口中,輸入文件名log4j.properties ? 完成:創(chuàng)建工作結(jié)束,1,2,3,30,如何使用log4j記錄日志,第三步:使用log4j記錄日志信息,import org.apache.log4j.
40、Logger;public class TeacherLog4j { public static void main(String[] args) {Teacher teacher = new Teacher(); Logger logger = Logger.getLogger(AccpTeacherLog4j.class.getName()); try {logger.debug("設置教員的編號。&q
41、uot;);teacher.setId("088"); } catch (IllegalArgumentException ex) {logger.info(ex.getMessage()); } }},獲取日志記錄器,這個記錄器將負責控制日志信息,使用Logger對象的debug、info方法輸出日志信息,31,如何使用log4j記錄日志,第四步:編寫log4j.properties文件,配置日志
42、信息,### 把日志信息輸出到控制臺 ###log4j.appender.stdout=org.apache.log4j.ConsoleAppenderlog4j.appender.stdout.Target=System.outlog4j.appender.stdout.layout=org.apache.log4j.PatternLayoutlog4j.appender.stdout.layout.ConversionPat
43、tern=%d{yyyy-MM-dd HH:mm:ss} %m%n### 把日志信息輸出到文件:accp.log ###log4j.appender.file=org.apache.log4j.FileAppenderlog4j.appender.file.File=accp.loglog4j.appender.file.layout=org.apache.log4j.PatternLayoutlog4j.appender
44、.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %l %m%n### 設置優(yōu)先級別、以及輸出源 ###log4j.rootLogger=debug, stdout, file,日志信息將寫到文件中,指定日志輸出的文件名,指定輸出格式:顯示日期和log信息,設置優(yōu)先級別為debug、日志被輸出到多個輸出源,日志信息將寫到控制臺,,,指定日志信息輸出目標,指定輸出格
45、式:顯示日期,日志發(fā)生位置和日志信息,輸出源名稱,優(yōu)先級從高到低分別是ERROR、WARN、INFO、DEBUG 在此處,如果優(yōu)先級別設為info,那么使用debug方法打印的日志信息將不被輸出,32,如何使用log4j記錄日志,運行效果展示,控制臺輸出效果,包含日期與日志信息,文件輸出效果,包含日期、日志發(fā)生位置、與日志信息,1,2,33,總結(jié),請給出下列Java代碼的運行結(jié)果,public class Test {publi
46、c static void main(String[] args) {new Test().test();}public void test() {try {int[] arr = new int[3];arr[3] = 2;System.out.println("try");} catch (ArrayIndexOutOfBoundsException e) { System.ou
47、t.println("catch 1");} catch (Exception e) { System.out.println("catch 2");} finally { System.out.println("finally");}}},修改log4j.properties文件,設置優(yōu)先級為info,在控制臺以及accp.log文件中將
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 異常處理辦法和程序
- 生產(chǎn)異常處理作業(yè)程序_
- 異常處理和程序調(diào)試
- 用藥錯誤的應急預案及處理程序
- 用藥錯誤的應急預案及處理程序
- 面向?qū)ο蟪绦蛟O計異常處理
- 包含異常處理的Java程序切片研究.pdf
- 第26章應用程序的調(diào)試和異常處理
- 常見錯誤和程序調(diào)試
- 異常槽處理及槽控機控制程序
- 應用程序發(fā)生異常,未知的軟件異常怎么辦?為什么內(nèi)存不能為written,內(nèi)存不能為read?應用程序錯誤怎么辦?
- 測量錯誤處理
- lua 錯誤處理
- 成語使用錯誤常見類型
- 衛(wèi)生巾的錯誤使用
- 外文翻譯---錯誤處理
- 面向C#程序的異常處理系統(tǒng)的設計與應用.pdf
- 中考常見成語使用錯誤歸類
- 制程異常處理流程
- 生產(chǎn)異常處理流程
評論
0/150
提交評論