




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
使用異常處理程序錯誤第四章1回顧什么是常量?Java中,常量的定義規(guī)則有哪些?什么是面向接口編程,它的好處是什么?2預習檢查什么是異常?Java中,如何進行異常處理?請說明throw與throws的區(qū)別與聯(lián)系?3本章任務升級HelloACCP,完成如下功能:根據課程代碼輸出課程名稱輸出各學期平均課時等信息使用log4j記錄異常日志4掌握Java的異常處理機制運用try、catch、finally處理異常運用throw拋出異常運用throws聲明異常掌握log4j的用法,能夠記錄異常日志本章目標5程序中的異常publicclassHelloAccp{publicstaticvoidmain(String[]args){System.out.print("請輸入課程代號(1至3之間的數字):");Scannerin=newScanner(System.in);intcourseCode=in.nextInt();//從鍵盤輸入整數switch(courseCode){case1:System.out.println("C#編程");break;case2:System.out.println("Java編程");break;case3:System.out.println("SQL基礎");}}}輸入:2輸出:Java編程輸入:B程序中斷運行!正常情況:異常情況:7什么是異常異常就是在程序的運行過程中所發(fā)生的不正常的事件,它會中斷正在運行的程序繞行或者等待請求交警解決異常!面對異常該怎么辦呢?通常情況下,我們會這樣處理:程序運行程序中斷運行堵車!撞車!生活中,我們會根據不同的異常進行相應的處理,而不會就此中斷我們的生活8Java中如何進行異常處理Java的異常處理是通過5個關鍵字來實現(xiàn)的:try、catch、finally、throw、throws捕獲異常catchtryfinally執(zhí)行可能產生異常的代碼捕獲異常無論是否發(fā)生異常,代碼總能執(zhí)行手動拋出異常拋出異常throw聲明異常聲明方法可能要拋出的各種異常throws10try/catch塊7-1trycatchtry/catch塊后的代碼段publicvoidmethod(){try{//代碼段(此處不會產生異常)}catch(異常類型ex){//對異常進行處理的代碼段}//代碼段}使用try/catch塊捕獲異常,分為三種情況:第一種情況11try/catch塊7-2使用示例模擬第一種情況:publicclassAccpException{publicstaticvoidmain(String[]args){System.out.print("請輸入課程代號(1至3之間的數字):");Scannerin=newScanner(System.in);try{intcourseCode=in.nextInt();switch(courseCode){ case1: System.out.println("C#編程"); break; case2: System.out.println("Java編程"); break; case3: System.out.println("SQL基礎");}}catch(Exceptionex){System.out.println("輸入不為數字!");}System.out.println("歡迎提出建議!");}}輸入:2Java編程歡迎提出建議!控制臺輸出12try/catch塊7-3trycatch異常類型匹配try/catch塊后的代碼段進入catch塊publicvoidmethod(){try{//代碼段1//產生異常的代碼段2//代碼段3}catch(異常類型ex){//對異常進行處理的代碼段4}//代碼段5}使用try/catch塊捕獲異常,分為三種情況:第二種情況產生異常對象程序繼續(xù)執(zhí)行異常是一種特殊的對象,類型為java.lang.Exception或其子類
發(fā)生異常13try/catch塊7-4使用示例模擬第二種情況:publicclassAccpException{publicstaticvoidmain(String[]args){System.out.print("請輸入課程代號(1至3之間的數字):");Scannerin=newScanner(System.in);try{intcourseCode=in.nextInt();switch(courseCode){ case1: System.out.println("C#編程"); break; case2: System.out.println("Java編程"); break; case3: System.out.println("SQL基礎");}}catch(Exceptionex){System.out.println("輸入不為數字!");
ex.printStackTrace();}System.out.println("歡迎提出建議!");}}輸入:B輸入不為數字!異常堆棧信息歡迎提出建議!控制臺輸出14printStackTrace的堆棧跟蹤功能顯示出程序運行到當前類的執(zhí)行流程publicclassAccpException{publicstaticvoidmain(String[]args){System.out.print("請輸入課程代號(1至3之間的數字):");Scannerin=newScanner(System.in);try{intcourseCode=in.nextInt();//此處代碼省略}catch(Exceptionex){System.out.println("輸入不為數字!");
ex.printStackTrace();}System.out.println("歡迎提出建議!");}}try/catch塊7-5java.util.InputMismatchExceptionatjava.util.Scanner.throwFor(Scanner.java:840)atjava.util.Scanner.next(Scanner.java:1461)atjava.util.Scanner.nextInt(Scanner.java:2091)atjava.util.Scanner.nextInt(Scanner.java:2050)ats2jsp.sg.ch05.AccpException.main(AccpException.java:23)異常類型異常堆棧信息在此方法中拋出了異常15try/catch塊7-7使用示例模擬第三種情況:publicclassAccpException2{publicstaticvoidmain(String[]args){System.out.print("請輸入課程代號(1至3之間的數字):");Scannerin=newScanner(System.in);try{intcourseCode=in.nextInt();switch(courseCode){ case1: System.out.println("C#編程"); break; case2: System.out.println("Java編程"); break; case3: System.out.println("SQL基礎");}}catch(NullPointerExceptionex){System.out.println("輸入不為數字!");}System.out.println("歡迎提出建議!");}}輸入:B程序中斷運行17try/catch/finally2-1在try/catch塊后加入finally塊,可以確保無論是否發(fā)生異常,finally塊中的代碼總能被執(zhí)行try塊finally塊catch塊無異常有異常18小結1編寫一個類ExceptionTest1,在main方法中使用try、catch、finally:在try塊中,編寫被0除的代碼在catch塊中,捕獲被0除所產生的異常,并且打印異常信息在finally塊中,打印一條語句完整代碼實現(xiàn)20publicvoidmethod(){try{//代碼段//產生異常(異常類型2)}catch(異常類型1ex){//對異常進行處理的代碼段}catch(異常類型2ex){//對異常進行處理的代碼段}catch(異常類型3ex){//對異常進行處理的代碼段}//代碼段}多重catch塊2-1一段代碼可能會引發(fā)多種類型的異常當引發(fā)異常時,會按順序來查看每個catch語句,并執(zhí)行第一個與異常類型匹配的catch語句執(zhí)行其中的一條catch語句之后,其后的catch語句將被忽略
try與異常類型1不匹配try/catch塊后的代碼段發(fā)生異常產生異常對象catch與異常類型2匹配catchcatch程序繼續(xù)執(zhí)行進入catch塊21多重catch塊2-2publicclassAccpException4{publicstaticvoidmain(String[]args){Scannerin=newScanner(System.in);try{System.out.print(“請輸入S1的總學時:");inttotalTime=in.nextInt();//總學時System.out.print(“請輸入S1的課程數目:");inttotalCourse=in.nextInt();//課程數目System.out.println(“S1各課程的平均學時為:"+totalTime/totalCourse);}catch(InputMismatchExceptione1){System.out.println("輸入不為數字!");}catch(ArithmeticExceptione2){System.out.println("課程數目不能為零!");}catch(Exceptione){System.out.println("發(fā)生錯誤:"+e.getMessage());}}}輸入:270H在安排catch語句的順序時,首先應該捕獲最特殊的異常,然后再逐漸一般化,即先子類后父類輸出:輸入不為數字!進入第一個catch塊輸入:2700輸出:課程數目不能為零!進入第二個catch塊22拋出異常如果在當前環(huán)境無法解決一個異常,就要將其拋出,把異常交給調用者處理publicclassAccpTeacher{privateStringid;//教員編號,長度應為7publicvoidsetId(StringpId){//判斷教員編號的長度是否為7if(pId.length()==7){id=pId;}else{thrownewIllegalArgumentException("參數長度應為7!");}}}publicclassAccpTeacherTest{publicstaticvoidmain(String[]args){AccpTeacherteacher=newAccpTeacher();try{teacher.setId("088");}catch(IllegalArgumentExceptionex){System.out.println(ex.getMessage());}}}拋出異常捕獲異常參數長度應為7!控制臺輸出23聲明異常publicclassAccpTeacher{privateStringid;//教員編號,長度應為7publicvoidsetId(StringpId)throwsIllegalArgumentException{//判斷教員編號的長度是否為7if(pId.length()==7){id=pId;}else{thrownewIllegalArgumentException("參數長度應為7!");}}}publicclassAccpTeacherTest{publicstaticvoidmain(String[]args){AccpTeacherteacher=newAccpTeacher();try{teacher.setId("088");}catch(IllegalArgumentExceptionex){System.out.println(ex.getMessage());}}}由調用者捕獲異常聲明該方法可能會產生異常24小結2編寫類ExceptionTest2:定義兩個方法:go()和main()在go方法中聲明要拋出異常,在該方法體內,拋出一個Exception對象在main()方法中,調用go方法,使用try/catch捕獲go方法中拋出的異常完整代碼實現(xiàn)25什么是日志日志:用來記錄一些重要的操作信息有價值的日志數據能夠幫助用戶提前發(fā)現(xiàn)和避開災難,并且找到事件發(fā)生的原因publicclassAccpTeacherTest{publicstaticvoidmain(String[]args){AccpTeacherteacher=newAccpTeacher();try{teacher.setId("088");}catch(IllegalArgumentExceptionex){System.out.println(ex.getMessage());}}}在控制臺輸出日志信息,提示用戶出現(xiàn)錯誤的原因27如何使用log4j記錄日志項目屬性:彈出項目的屬性窗口第一步:在工程中加入log4j所使用的jar文件Java構建路徑庫添加外部JAR:彈出選擇JAR的窗口通過選擇JAR的窗口,找到log4j-1.2.x.jar,并確認回到項目的屬性窗口,點擊確定1234演示:在工程中加入log4j所使用的jar文件28如何使用log4j記錄日志第三步:使用log4j記錄日志信息importorg.apache.log4j.Logger;publicclassAccpTeacherLog4j{publicstaticvoidmain(String[]args){AccpTeacherteacher=newAccpTeacher();Loggerlogger=Logger.getLogger(AccpTeacherLog4j.class.getName());try{logger.debug("設置教員的編號。");teacher.setId("088");}catch(IllegalArgumentExceptionex){(ex.getMessage());}}}獲取日志記錄器,這個記錄器將負責控制日志信息使用Logger對象的debug、info方法輸出日志信息30如何使用log4j記錄日志第四步:編寫perties文件,配置日志信息###把日志信息輸出到控制臺###log4j.appender.stdout=org.apache.log4j.ConsoleAppenderlog4j.appender.stdout.Target=System.outlog4j.appender.stdout.layout=org.apache.log4j.PatternLayoutlog4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-ddHH: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.file.layout.ConversionPattern=%d{yyyy-MM-ddHH:mm:s
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五商鋪物業(yè)委托管理合同(含社區(qū)健康管理與醫(yī)療支持)
- 二零二五年校園環(huán)境衛(wèi)生管理與綠化合同
- 二零二五年度農村土地承包經營權與農村社會保障合作合同
- 二零二五年度夜店酒吧員工安全協(xié)議與安全教育培訓費用合同
- 2025年度電動車買賣協(xié)議模版
- 二零二五年度知識產權法律風險管理顧問合同
- 二零二五年度武漢房屋租賃合同物業(yè)管理約定
- 二零二五年度摩托車第三者責任保險合同
- 《物流系統(tǒng)分析》課件 項目九-任務三 (一)車輛路徑優(yōu)化模型1
- 2025年包頭a2貨運資格證模擬考試
- 中醫(yī)養(yǎng)生保健素養(yǎng)知識講座
- 采耳員工合同
- 汽車修理有限公司章程
- (多場景條款)過橋墊資借款合同
- JBT 7901-2023 金屬材料實驗室均勻腐蝕全浸試驗方法 (正式版)
- 小學科學人教鄂教版四年級下冊全冊教案2023春
- 非遺文化介紹課件:扎染
- 營銷培訓:揭秘銷售成功密碼
- 基于STM32Cube的嵌入式系統(tǒng)應用 教案
- 動畫分鏡頭腳本設計課件
- DB37T 5245-2022 橋梁智慧健康監(jiān)測技術標準
評論
0/150
提交評論