版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、回想q 什么是常量?Java中,常量的定義規(guī)則有哪些?q 什么是面向接口編程,它的好處是什么? 掌握Java的異常處理機制 運用 try 、catch 、 finally 處理異常 運用 throw 拋出異常 運用 throws 聲明異常 掌握log4j的用法,能夠記錄異常日志本章目標生活中的異常 正常情況下,小王每日開車去上班,耗時大約30分鐘 但是,異常情況遲早要發(fā)生!一路暢通一路暢通堵車!堵車!撞車!撞車!程序中的異常public class Hello public static void main(String args) System.out.print(請輸入課程代號請輸入課程代
2、號(1至至3之間的數(shù)字之間的數(shù)字):);Scanner in = new Scanner(System.in);int courseCode = in.nextInt(); / 從鍵盤輸入整數(shù)從鍵盤輸入整數(shù)switch (courseCode) case 1:System.out.println(C#編程編程); break;case 2:System.out.println(Java編程編程); break;case 3:System.out.println(SQL基礎基礎); 輸入:輸入:2輸出:輸出:Java編程編程輸入:輸入:B程序中斷運行!程序中斷運行!正常情況:正常情況:異常情況:
3、異常情況:什么是異常 異常就是在程序的運行過程中所發(fā)生的不正常的事件,它會中斷正在運行的程序繞行或者等待繞行或者等待請求交警解決請求交警解決異常!異常! 面對異常該怎么辦呢?通常情況下,我們會這樣處理:程序運行程序運行程序中斷運行程序中斷運行堵車!堵車!撞車!撞車!生活中,我們會根據不同的異常進行相應的處理,生活中,我們會根據不同的異常進行相應的處理,而不會就此中斷我們的生活而不會就此中斷我們的生活什么是異常處理 Java語言使用異常處理機制為程序提供了錯誤處理的能力程序中預先想好了程序中預先想好了 對付異常的處理辦法對付異常的處理辦法 異常!異常! 程序運行程序運行處理完畢,程序繼續(xù)運行處理
4、完畢,程序繼續(xù)運行對異常進行處理對異常進行處理Java中如何進行異常處理 Java的異常處理是通過5個關鍵字來實現(xiàn)的:try、catch、 finally、throw、throws 捕獲異常捕獲異常 catchtryfinally執(zhí)行可能產生執(zhí)行可能產生 異常的代碼異常的代碼 捕獲異常捕獲異常 無論是否發(fā)生異常,無論是否發(fā)生異常,代碼總能執(zhí)行代碼總能執(zhí)行手動拋出異常手動拋出異常 拋出異常拋出異常 throw聲明異常聲明異常 聲明方法可能要聲明方法可能要拋出的各種異常拋出的各種異常 throwstry/catch塊7-1trycatch try/catch 塊后的代碼段塊后的代碼段public
5、void method()try / 代碼段代碼段(此處不會產生異常此處不會產生異常) catch (異常類型異常類型 ex) / 對異常進行處理的代碼段對異常進行處理的代碼段/ 代碼段代碼段 使用try/catch塊捕獲異常,分為三種情況:第一種情況第一種情況 try/catch塊7-2 使用示例模擬第一種情況:public class Exception public static void main(String args) System.out.print(請輸入課程代號請輸入課程代號(1至至3之間的數(shù)字之間的數(shù)字):);Scanner in = new Scanner(System.
6、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基礎基礎); catch (Exception ex) System.out.println(輸入不為數(shù)字輸入不為數(shù)字!);System.out.println(歡迎提出建議歡迎提出建議!);輸入:輸入:2Java編程編程歡迎提出建議歡迎提出建議!控制
7、臺輸出控制臺輸出try/catch塊7-3trycatch異常類型匹配異常類型匹配 try/catch 塊后的代碼段塊后的代碼段進入進入catch塊塊public void method()try try / 代碼段代碼段 1 / 產生異常的代碼段產生異常的代碼段 2 / 代碼段代碼段 3 catch (異常類型異常類型 ex) / 對異常進行處理的代碼段對異常進行處理的代碼段4/ 代碼段代碼段5 使用try/catch塊捕獲異常,分為三種情況:第二種情況第二種情況 產生異常對象產生異常對象 程序繼續(xù)執(zhí)行程序繼續(xù)執(zhí)行異常是一種特殊的對象,類型為異常是一種特殊的對象,類型為java.lang.E
8、xception或其子類或其子類 發(fā)生異常try/catch塊7-4 使用示例模擬第二種情況:public class Exception public static void main(String args) System.out.print(請輸入課程代號請輸入課程代號(1至至3之間的數(shù)字之間的數(shù)字):);Scanner in = new Scanner(System.in);try int courseCode = in.nextInt();switch (courseCode) case 1:System.out.println(C#編程編程);break;case 2:System
9、.out.println(Java編程編程);break;case 3:System.out.println(SQL基礎基礎); catch (Exception ex) System.out.println(輸入不為數(shù)字輸入不為數(shù)字!); ex.printStackTrace();System.out.println(歡迎提出建議歡迎提出建議!);輸入:輸入:B輸入不為數(shù)字輸入不為數(shù)字!異常堆棧信息異常堆棧信息歡迎提出建議歡迎提出建議!控制臺輸出控制臺輸出 printStackTrace的堆棧跟蹤功能顯示出程序運行到當前類的執(zhí)行流程 public class Exception public
10、 static void main(String args) System.out.print(請輸入課程代號請輸入課程代號(1至至3之間的數(shù)字之間的數(shù)字):); Scanner in = new Scanner(System.in); try int courseCode = in.nextInt(); /此處代碼省略此處代碼省略 catch (Exception ex) System.out.println(輸入不為數(shù)字!輸入不為數(shù)字!); ex.printStackTrace(); System.out.println(歡迎提出建議歡迎提出建議!); try/catch塊7-5java.
11、util.InputMismatchExceptionat 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 s2jsp.sg.ch05. Exception.main(AccpException.java:23)異常類型異常類型異常堆棧信息異常堆棧信息在此方法中拋出了異常在此方
12、法中拋出了異常try/catch塊7-6trycatch異常類型不匹配異常類型不匹配 try/catch 塊后的代碼段塊后的代碼段程序中斷運行程序中斷運行 發(fā)生異常public void method()try / 代碼段代碼段 1 / 產生異常的代碼段產生異常的代碼段 2 / 代碼段代碼段 3 catch (異常類型異常類型 ex) / 對異常進行處理的代碼段對異常進行處理的代碼段4/ 代碼段代碼段5 使用try/catch塊捕獲異常,分為三種情況:第三種情況第三種情況 產生異常對象產生異常對象 try/catch塊7-7 使用示例模擬第三種情況:public class Exception
13、2 public static void main(String args) System.out.print(請輸入課程代號請輸入課程代號(1至至3之間的數(shù)字之間的數(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基礎基礎)
14、; catch (NullPointerException ex) System.out.println(輸入不為數(shù)字!輸入不為數(shù)字!);System.out.println(歡迎提出建議!歡迎提出建議!);輸入:輸入:B程序中斷運行程序中斷運行try/catch/finally 2-1 在try/catch塊后加入finally塊,可以確保無論是否發(fā)生異常,finally塊中的代碼總能被執(zhí)行try 塊塊 finally 塊塊 catch 塊塊 無異常無異常 有異常有異常 try/catch/finally 2-2 public class Exception3 public static v
15、oid main(String args) System.out.print(請輸入課程代號請輸入課程代號(1至至3之間的數(shù)字之間的數(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基礎基礎); catch (Exceptio
16、n ex) System.out.println(輸入不為數(shù)字!輸入不為數(shù)字!); finally System.out.println(歡迎提出建議!歡迎提出建議!);輸入:輸入:2Java編程編程歡迎提出建議歡迎提出建議!控制臺輸出控制臺輸出輸入:輸入:B輸入不為數(shù)字輸入不為數(shù)字!歡迎提出建議歡迎提出建議!第一種情況:第一種情況:無異常無異常第二種情況:第二種情況:有異常有異常 小結 1 編寫一個類ExceptionTest1,在main方法中使用try、catch、finally: 在try塊中,編寫被0除的代碼 在catch塊中,捕獲被0除所產生的異常,并且打印異常信息 在finall
17、y塊中,打印一條語句完整代碼實現(xiàn)完整代碼實現(xiàn)public void method()try / 代碼段代碼段 / 產生異常產生異常(異常類型異常類型2) catch (異常類型異常類型1 ex) / 對異常進行處理的代碼段對異常進行處理的代碼段 catch (異常類型異常類型2 ex) / 對異常進行處理的代碼段對異常進行處理的代碼段 catch (異常類型異常類型3 ex) / 對異常進行處理的代碼段對異常進行處理的代碼段/ 代碼段代碼段多重catch塊 2-1 一段代碼可能會引發(fā)多種類型的異常 當引發(fā)異常時,會按順序來查看每個 catch 語句,并執(zhí)行第一個與異常類型匹配的catch語句
18、執(zhí)行其中的一條 catch 語句之后,其后的 catch 語句將被忽略 try 與異常類型與異常類型1不匹配不匹配try/catch 塊后的代碼段塊后的代碼段發(fā)生異常發(fā)生異常產生異常對象產生異常對象catch與異常類型與異常類型2匹配匹配catchcatch程序繼續(xù)執(zhí)行程序繼續(xù)執(zhí)行進入進入catch塊塊多重catch塊 2-2public class Exception4 public static void main(String args) Scanner in = new Scanner(System.in);trySystem.out.print(“請輸入請輸入S1的總學時:的總學時:
19、);int totalTime = in.nextInt(); /總學時總學時System.out.print(“請輸入請輸入S1的課程數(shù)目:的課程數(shù)目:);int totalCourse = in.nextInt(); /課程數(shù)目課程數(shù)目System.out.println(“S1各課程的平均學時為:各課程的平均學時為: + totalTime / totalCourse); catch (InputMismatchException e1) System.out.println(輸入不為數(shù)字輸入不為數(shù)字!); catch (ArithmeticException e2) System.ou
20、t.println(課程數(shù)目不能為零課程數(shù)目不能為零!); catch (Exception e) System.out.println(發(fā)生錯誤發(fā)生錯誤:+e.getMessage();輸入:輸入:270 H 在安排在安排catch語句的順序時,首先應該捕獲最特殊的異常,語句的順序時,首先應該捕獲最特殊的異常, 然后再逐漸一般化,即先子類后父類然后再逐漸一般化,即先子類后父類 輸出:輸出:輸入不為數(shù)字輸入不為數(shù)字!進入第一個進入第一個catch塊塊輸入:輸入:270 0 輸出:輸出:課程數(shù)目不能為零課程數(shù)目不能為零!進入第二個進入第二個catch塊塊拋出異常 如果在當前環(huán)境無法解決一個異常,
21、就要將其拋出,把異常交給調用者處理 public class Teacher private String id; / 教員編號,長度應為教員編號,長度應為7 public void setId(String pId) / 判斷教員編號的長度是否為判斷教員編號的長度是否為7 if (pId.length() = 7) id = pId; else throw new IllegalArgumentException(參數(shù)長度應為參數(shù)長度應為7!); 拋出異常:拋出異常:在不使用在不使用try、catch語句或語句或throws的前提下,只可以拋出運行的前提下,只可以拋出運行時異常對象時異常對象
22、RuntimeException或其子類對象,如:或其子類對象,如:NullPointerException、IllegalArgumentException等等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(); 捕獲異常捕獲異常參數(shù)長度應為參數(shù)長度應為7!控制臺輸出控
23、制臺輸出聲明異常public class Teacher private String id;/ 教員編號教員編號,長度應為長度應為7 public void setId(String pId) throws IllegalArgumentException / 判斷教員編號的長度是否為判斷教員編號的長度是否為7 if (pId.length() = 7) id = pId; else throw new IllegalArgumentException(參數(shù)長度應為參數(shù)長度應為7!); public class TeacherTest public static void main(Stri
24、ng args) Teacher teacher = new Teacher();try teacher.setId(088); catch (IllegalArgumentException ex) System.out.println(ex.getMessage(); 由調用者捕獲異常由調用者捕獲異常 聲明該方法可能會產生異常聲明該方法可能會產生異常 小結 2 編寫類ExceptionTest2: 定義兩個方法:go()和main() 在go方法中聲明要拋出異常,在該方法體內,拋出一個Exception對象 在main()方法中,調用go方法,使用try/catch捕獲go方法中拋出的異常
25、完整代碼實現(xiàn)完整代碼實現(xiàn) 使用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(); 控制臺輸出控制臺輸出參數(shù)長度應為參數(shù)長度應為7! 如果想把錯誤信息如果想把錯誤信息保存到文件中,該保存到文件中,該如何處理?如何處理?使用使用log4j可以解決這個問
26、題,可以解決這個問題,log4j是一個流行的日志記錄工具是一個流行的日志記錄工具 這是使用這是使用log4j后,存儲在文本文件中的日志信息后,存儲在文本文件中的日志信息 什么是日志 日志:用來記錄一些重要的操作信息 有價值的日志數(shù)據能夠幫助用戶提前發(fā)現(xiàn)和避免災難,并且找到事件發(fā)生的原因 public class TeacherTest public static void main(String args) Teacher teacher = new Teacher(); try teacher.setId(088); catch (IllegalArgumentException ex) S
27、ystem.out.println(ex.getMessage(); 在控制臺輸出日志在控制臺輸出日志信息,提示用戶出信息,提示用戶出現(xiàn)錯誤的原因現(xiàn)錯誤的原因 如何使用log4j記錄日志工程工程 屬性屬性 :彈出項目的屬性窗口:彈出項目的屬性窗口 第一步:在工程中加入log4j所使用的jar文件Java構建路徑構建路徑庫庫添加外部添加外部JAR:彈出選擇:彈出選擇JAR的窗口的窗口通過選擇通過選擇JAR的窗口,找到的窗口,找到log4j-1.2.x.jar,并確認,并確認回到項目的屬性窗口,點擊確定回到項目的屬性窗口,點擊確定1234演示:在工程中加入演示:在工程中加入log4j所使用的所使用
28、的jar文件文件 如何使用log4j記錄日志 第二步:創(chuàng)建perties文件選擇欲使用選擇欲使用log4j的項目的項目右鍵點擊右鍵點擊src 新建新建其他其他 :彈出選擇向導窗口:彈出選擇向導窗口在選擇向導窗口中,選擇常規(guī)在選擇向導窗口中,選擇常規(guī) 文件文件 下一步:彈出新建文件的窗口下一步:彈出新建文件的窗口在新建文件窗口中,輸入文件名在新建文件窗口中,輸入文件名perties 完成:創(chuàng)建工作結束完成:創(chuàng)建工作結束123演示:創(chuàng)建演示:創(chuàng)建perties文件文件 如何使用log4j記錄日志 第三步:使用log4j記錄日志信息import
29、org.apache.log4j.Logger;public class TeacherLog4j public static void main(String args) Teacher teacher = new Teacher(); Logger logger = Logger.getLogger(TeacherLog4j.class.getName(); try logger.debug(設置教員的編號。設置教員的編號。);teacher.setId(088); catch (IllegalArgumentException ex) (ex.getMessage(
30、); 獲取日志記錄器,獲取日志記錄器,這個記錄器將負責這個記錄器將負責控制日志信息控制日志信息 使用使用Logger對象的對象的debug、info方法方法輸出日志信息輸出日志信息 第四步:編寫perties文件,配置日志信息# 把日志信息輸出到控制臺把日志信息輸出到控制臺 #log4j.appender.stdout=org.apache.log4j.ConsoleAppenderlog4j.appender.stdout.Target=System.outlog4j.appender.stdout.layout=org.apache.log4j.PatternLayoutlog4j.appender.stdout.layout.ConversionPattern=%dyyyy-MM-dd HH:mm:ss %m%n# 把日志信息輸出到文件:把日志信息輸出到文件:a.log #log4j.appender.file=org.apache.log4j.FileAppenderlog4j.appender.file.File=a.loglog4j.appender.file.layout=org.apache.log4j.Patt
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年某地關于生物醫(yī)藥產業(yè)化基地建設與運營的合同
- 2025年張家界道路貨運駕駛員從業(yè)資格證考試題庫完整
- 2025年滁州運輸從業(yè)資格證考試試題庫
- 2024年土地流轉服務田地承包合同3篇
- 畜牧業(yè)律師聘用合同模板
- 體育用品加工廠合同
- 智能家居系統(tǒng)招投標細則及記錄
- 倉儲安全員招聘協(xié)議模板
- 2024年度汽車租賃融資合同模板(企業(yè)公務車管理)3篇
- 咖啡廳安全員招聘簡章
- 學生對科學實驗課調查問卷
- NSE型板鏈斗式提升機(中文)
- 部編語文三年級上冊課文全部量詞
- 大力加強依法治校推進學校治理體系和治理能力現(xiàn)代化
- 水平定向鉆施工組織方案通用
- 盧家宏《我心永恒MyHeartWillGoOn》指彈吉他譜
- 體檢中心建設標準
- 上海高院最新口徑《勞動爭議案件若干問題的解答》
- 小說《活著》英文ppt簡介
- 2021江蘇學業(yè)水平測試生物試卷(含答案)
- 裝飾裝修工程完整投標文件.doc
評論
0/150
提交評論