版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第五章異常預習檢查什么是異常?Java中,如何進行異常處理?如何使用log4j記錄日志?2/40集中測試回顧與作業(yè)點評簡述抽象類和接口的應用場合面向接口編程的好處是什么?點評作業(yè)的提交情況和共性問題提問3/40作業(yè)點評本章任務根據(jù)輸入的課程編號輸出相應的課程名稱使用throw拋出異常使用log4j記錄日志4/40本章目標
熟悉使用try-catch-finally處理異常
會使用throw、throws拋出異常掌握異常及其分類使用log4j記錄日志5/40生活中的異常正常情況下,小王每日開車去上班,耗時大約30分鐘但是,異常情況遲早要發(fā)生!一路暢通堵車!撞車!6/40程序中的異常2-1以下程序運行時會出現(xiàn)錯誤嗎?publicclassTest1{ publicstaticvoidmain(String[]args){ Scannerin=newScanner(System.in); System.out.print("請輸入被除數(shù):"); intnum1=in.nextInt(); System.out.print("請輸入除數(shù):"); intnum2=in.nextInt(); System.out.println(String.format("%d/%d=%d", num1,num2,num1/num2)); System.out.println("感謝使用本程序!"); }}代碼閱讀演示示例1:程序中的異常7/40程序中的異常2-2如何解決該問題呢?publicclassTest2{ publicstaticvoidmain(String[]args){ Scannerin=newScanner(System.in); … System.out.print("請輸入除數(shù):"); intnum2=0; if(in.hasNextInt()){//如果輸入的除數(shù)是整數(shù)
num2=in.nextInt(); if(0==num2){//如果輸入的除數(shù)是0 System.err.println("輸入的除數(shù)是0,程序退出。"); System.exit(1); } }else{//如果輸入的除數(shù)不是整數(shù)
System.err.println("輸入的除數(shù)不是整數(shù),程序退出。"); System.exit(1); } … }}嘗試通過if-else來解決異常問題弊端:1、代碼臃腫2、程序員要花很大精力“堵漏洞”3、程序員很難堵住所有“漏洞”使用異常機制提問8/40什么是異常異常是指在程序的運行過程中所發(fā)生的不正常的事件,它會中斷正在運行的程序繞行或者等待請求交警解決異常生活中面對異常通常會這樣處理程序運行程序中斷運行堵車!撞車!生活中,根據(jù)不同的異常進行相應的處理,而不會就此中斷我們的生活9/40什么是異常處理Java編程語言使用異常處理機制為程序提供了錯誤處理的能力程序中預先設置好對付異常的處理辦法異常程序運行處理完畢,程序繼續(xù)運行對異常進行處理10/40Java的異常處理是通過5個關鍵字來實現(xiàn)的:try、catch、finally、throw、throwsJava中如何進行異常處理
捕獲異常catchtryfinally執(zhí)行可能產(chǎn)生異常的代碼捕獲異常無論是否發(fā)生異常,代碼總能執(zhí)行手動拋出異常throw聲明方法可能要拋出的各種異常throws聲明異常拋出異常11/40使用try-catch塊捕獲異常,分為三種情況trycatchtry-catch
塊后的代碼段publicvoidmethod(){try{//代碼段(此處不會產(chǎn)生異常)}catch(異常類型ex){//對異常進行處理的代碼段}//代碼段}try-catch塊5-1第一種情況:正常演示示例2:使用try-catch處理異常12/40使用try-catch塊捕獲異常,分為三種情況try異常類型匹配try-catch
塊后的代碼段進入catch塊publicvoidmethod(){try
{//代碼段1//產(chǎn)生異常的代碼段2//代碼段3}catch
(異常類型ex){//對異常進行處理的代碼段4}//代碼段5}try-catch塊5-2第二種情況:出現(xiàn)異常產(chǎn)生異常對象程序繼續(xù)執(zhí)行異常是一種特殊的對象,類型為java.lang.Exception或其子類
發(fā)生異常catch演示示例2:使用try-catch處理異常13/40try-catch塊5-3printStackTrace的堆棧跟蹤功能顯示出程序運行到當前類的執(zhí)行流程java.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)atcn.jbit.exception.Test3.main(Test3.java:15)異常類型異常堆棧信息在此方法中拋出了異常出現(xiàn)異常的位置14/40使用try-catch塊捕獲異常,分為三種情況trycatch異常類型不匹配try-catch
塊后的代碼段程序中斷運行
發(fā)生異常publicvoidmethod(){try
{//代碼段1//產(chǎn)生異常的代碼段2//代碼段3}
catch(異常類型ex){//對異常進行處理的代碼段4}//代碼段5}try-catch塊5-4第三種情況:異常類型不匹配產(chǎn)生異常對象15/40在catch塊中處理異常加入用戶自定義處理信息調用方法輸出異常信息異常對象常用的方法try-catch塊5-5e.printStackTrace();System.err.println("出現(xiàn)錯誤:被除數(shù)和除數(shù)必須是整數(shù),
”
+"除數(shù)不能為零。");方法名說明voidprintStackTrace()輸出異常的堆棧信息StringgetMessage()返回異常信息描述字符串,是printStackTrace()輸出信息的一部分16/40常見的異常類型異常類型說明Exception異常層次結構的父類ArithmeticException算術錯誤情形,如以零作除數(shù)ArrayIndexOutOfBoundsException數(shù)組下標越界NullPointerException嘗試訪問null對象成員ClassNotFoundException不能加載所需的類IllegalArgumentException方法接收到非法參數(shù)ClassCastException對象強制類型轉換出錯NumberFormatException數(shù)字格式轉換異常,如把"abc"轉換成數(shù)字17/40try-catch-finally2-1在try-catch塊后加入finally塊是否發(fā)生異常都執(zhí)行不執(zhí)行的唯一情況try塊finally塊catch塊
無異常有異常System.exit(1)中斷程序,退出Java虛擬機演示示例3:使用try-catch-finally處理異常18/40try-catch-finally2-2存在return的try-catch-finally塊trycatchreturn異常類型匹配
發(fā)生異常publicvoidmethod(){try
{//代碼段1//產(chǎn)生異常的代碼段2}
catch(異常類型ex){//對異常進行處理的代碼段3
return;}finally{
//代碼段4}}產(chǎn)生異常對象finally進入catch塊執(zhí)行return退出
方法執(zhí)行finally塊try塊中有return語句執(zhí)行過程與此類似2134演示示例4:try塊和catch塊中return語句的執(zhí)行19/40引發(fā)多種類型的異常排列catch語句的順序:先子類后父類發(fā)生異常時按順序逐個匹配只執(zhí)行第一個與異常類型匹配的catch語句publicvoidmethod(){try{//代碼段
//產(chǎn)生異常(異常類型2)}catch(異常類型1ex){//對異常進行處理的代碼段}catch(異常類型2ex){//對異常進行處理的代碼段}catch(異常類型3ex){//對異常進行處理的代碼段}//代碼段}多重catch塊try
與異常類型1不匹配try-catch
塊后的代碼段發(fā)生異常產(chǎn)生異常對象catch與異常類型2匹配catchcatch程序繼續(xù)執(zhí)行進入catch塊演示示例5:使用多重catch處理異常20/40小結面試題:try-catch塊中存在return語句,是否還執(zhí)行finally塊,如果執(zhí)行,說出執(zhí)行順序try-catch-finally塊中,finally塊唯一不執(zhí)行的情況是什么?提問21/40學員操作——根據(jù)編號輸出課程名稱需求說明按照控制臺提示輸入1~3之間任一個數(shù)字,程序將輸出相應的課程名稱根據(jù)鍵盤輸入進行判斷。如果輸入正確,輸出對應課程名稱。如果輸入錯誤,給出錯誤提示不管輸入是否正確,均輸出“歡迎提出建議”語句練習完成時間:20分鐘22/40共性問題集中講解常見問題及解決辦法代碼規(guī)范問題調試技巧共性問題集中講解23/40聲明異常如果在一個方法體中拋出了異常,如何通知調用者?提問throws聲明某個方法可能拋出的各種異常publicclassTest7{ publicstaticvoiddivide()
throwsException{ //可能出現(xiàn)異常的代碼 } publicstaticvoidmain(String[]args){
try{
divide();
}
catch(Exceptione){ e.printStackTrace();
} }// publicstaticvoidmain(String[]args)throwsException{// divide();// }}聲明異常,多個異常用逗號隔開方式2:調用者繼續(xù)聲明異常方式1:調用者處理異常main方法聲明的異常由Java虛擬機處理演示示例6:使用throws聲明異常24/40拋出異常除了系統(tǒng)自動拋出異常外,有些問題需要程序員自行拋出異常publicclassPerson{ privateStringname="";//姓名
privateintage=0;//年齡
privateStringsex="男";//性別
publicvoidsetSex(Stringsex)throwsException{ if("男".equals(sex)||"女".equals(sex)) this.sex=sex; else{
thrownewException(“性別必須是\"男\(zhòng)"或者\"女\"!"); } }}拋出異常演示示例7:使用throw拋出異常25/40異常的分類
僅靠程序本身無法恢復的嚴重錯誤Exception和Error類的父類由Java應用程序拋出和處理的非嚴重錯誤運行時異常,不要求程序必須做出處理Checked異常,程序必須處理該類異常演示示例8:處理checked異常26/40小結27/35面試題:說出5個常見的運行時異常throw與throws的區(qū)別是什么?提問27/40學員操作——使用throw拋出異常需求說明在setAge(intage)中對年齡進行判斷,如果年齡介于1到100直接賦值,否則拋出異常在測試類中創(chuàng)建對象并調用setAge(intage)方法,使用try-catch捕獲并處理異常練習完成時間:15分鐘28/40共性問題集中講解常見問題及解決辦法代碼規(guī)范問題調試技巧共性問題集中講解29/40開源日志記錄工具log4j如何實現(xiàn)以文件形式記錄異常信息、程序正常運行的關鍵步驟信息?使用開源日志記錄工具——log4j來實現(xiàn)問題分析30/40日志及分類日志(log)主要用來記錄系統(tǒng)運行中一些重要操作信息便于監(jiān)視系統(tǒng)運行情況,幫助用戶提前發(fā)現(xiàn)和避開可能出現(xiàn)的問題,或者出現(xiàn)問題后根據(jù)日志找到原因日志分類 SQL日志、異常日志、業(yè)務日志log4j是一個非常優(yōu)秀的開源日志記錄工具控制日志的輸出級別控制日志信息輸送的目的地是控制臺、文件等控制每一條日志的輸出格式31/40使用log4j記錄日志2-1使用log4j記錄日志步驟使用log4j記錄日志信息4在項目中加入log4j的JAR文件1創(chuàng)建perties文件2配置日志信息3演示示例9:使用log4j記錄日志32/40使用log4j記錄日志2-2配置日志信息###設置Logger輸出級別和輸出目的地###log4j.rootLogger=debug,stdout,logfile###把日志信息輸出到控制臺###log4j.appender.stdout=org.apache.log4j.ConsoleAppenderlog4j.appender.stdout.Target=System.errlog4j.appender.stdout.layout=org.apache.log4j.SimpleLayout###把日志信息輸出到文件:jbit.log###log4j.appender.logfile=org.apache.log4j.FileAppenderlog4j.appender.logfile.File=jbit.loglog4j.appender.logfile.layout=org.apache.log4j.PatternLayoutlog4j.appender.logfile.layout.ConversionPattern=%d{yyyy-MM-ddHH:mm:ss}%l%F%p%m%n日志信息寫到文件中指定日志輸出的文件名指定日志布局類型日志信息輸出到控制臺信息打印到System.err上指定日志布局類型日志記錄器輸出級別:fatal>error>warn>info>debug指定轉換模式目的地的名字和目的地的名字33/40學員操作——使用log4j輸出日志到控制臺需求說明按照控制臺提示輸入被除數(shù)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度農(nóng)機租賃市場準入合同范本資訊4篇
- 二零二五版拌合料生產(chǎn)技術改造與升級合同4篇
- 二零二五版建筑工地勞務用工與綠色施工技術研發(fā)與推廣合同3篇
- 二零二五版舊設備買賣及拆解回收再利用合同3篇
- 2025年度綠色交通募集資金三方監(jiān)管與執(zhí)行合同4篇
- 二零二五年度少兒興趣班教室租賃及教學用品供應合同4篇
- 二零二五年度科技園區(qū)場地租賃及研發(fā)合作合同4篇
- 關于2025年度民法典規(guī)定協(xié)議離婚期限及法律支持4篇
- 二零二五年度智慧社區(qū)建設合同投標單位保密保證
- 二零二五年度外架工程風險評估與控制服務合同
- 物業(yè)民法典知識培訓課件
- 2023年初中畢業(yè)生信息技術中考知識點詳解
- 2024-2025學年八年級數(shù)學人教版上冊寒假作業(yè)(綜合復習能力提升篇)(含答案)
- 《萬方數(shù)據(jù)資源介紹》課件
- 醫(yī)生定期考核簡易程序述職報告范文(10篇)
- 第一章-地震工程學概論
- 《中國糖尿病防治指南(2024版)》更新要點解讀
- 初級創(chuàng)傷救治課件
- 交通運輸類專業(yè)生涯發(fā)展展示
- 2024年山東省公務員錄用考試《行測》試題及答案解析
- 神經(jīng)重癥氣管切開患者氣道功能康復與管理專家共識(2024)解讀
評論
0/150
提交評論