




版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
第八章異常及其處理遼寧機電職業(yè)技術學院信息工程系軟件教研室遲勇回顧double[]a=newdouble[];double[]a=newdouble[5]{1,2,3,4,5,};doublea={1,2,3,4,5};int[]a=newint[]{1,2,3,4,5};for(_______________;________;____){
System.out.println(a[i]);}int
i=a.length-1i>=0i--×××本章學習任務了解異常處理類層次在數(shù)學處理實例中使用異常處理使用自定義異常拋出指定的信息本章技能目標掌握異常的概念和類層次了解異常處理的格式學會如何自定義異常預習檢查(1)--預習新單詞5單詞釋義單詞釋義trycatchfinallyThrowExceptionErrorArithmetic預習檢查(2)什么是JDK,JRE和JVM?說說你對GoogleAndroid的了解?簡述一下Java應用程序的開發(fā)步驟?異常及其處理-內(nèi)容目錄異常概述異常處理的實施自定義異常8.1異常(Exception)
什么是異常?程序錯誤包含兩類:編譯時錯誤和運行時錯誤。編譯錯誤是指編譯器在編譯源文件時發(fā)現(xiàn)的代碼問題;運行時錯誤是指程序代碼無誤,但運行過程中發(fā)生的不正常情況。這種在程序運行過程中發(fā)生的異常事件,簡稱異常(Exception)。比如數(shù)組下標越界,除數(shù)為0,文件無法找到等。為保證程序的健壯性,針對異常的處理工作就稱為異常處理。Java作為網(wǎng)絡應用語言,保證服務器端應用程序的穩(wěn)定性和健壯性是至關重要的,為了阻止這些異常的發(fā)生,Java在程序的健壯性方面做了很多工作,例如制作了完整的異常處理類機制。8.1.2異常類層次
Java的異常處理類層次如圖所示(見下頁):類Throwable是所有錯誤類(Error)和異常類(Exception)的父類。Error類及其子類由Java虛擬機生成并拋出,由系統(tǒng)接收并處理,程序員無法通過調(diào)整程序代碼來避免這種錯誤,如VirtualMachineError,AWTError等Exception類是所有異常類的父類,其子類可分為兩種:運行時異常(RuntimeException)和其它類型的異常。其中運行時異常(RuntimeException)是程序運行過程中出現(xiàn)的問題,如:數(shù)組下標越界異常IndexOutOfBoundsException,數(shù)學異常ArithmeticException等。除運行時異常之外的異常都稱為其它類型異常。Java的異常處理類層次圖:ObjectThrowableErrorException其它類型異常RuntimeException……IOException……ArithmeticException……VirtualMachineError圖8-1異常處理類層次Java的異常處理類層次圖:異常子類說明ArithmeticException算術錯誤,如除以0IllegalArgumentException方法收到非法參數(shù)ArrayIndexOutOfBoundsException數(shù)組下標出界NullPointerException試圖訪問null對象引用SecurityException試圖違反安全性ClassNotFoundException不能加載請求的類ClassCastException試圖將對象強制轉(zhuǎn)換為不是該實例的子類時NegativeArraySizeException應用程序試圖創(chuàng)建大小為負的數(shù)組表8-1RuntimeException類的子類Java的異常處理類層次圖:表8-2其它異常類的子類異常子類說明AWTExceptionAWT中的異常IOExceptionI/O異常的根類FileNotFoundException不能找到文件EOFException文件結束IllegalAccessException對類的訪問被拒絕NoSuchMethodException請求的方法不存在InterruptedException線程中斷SQLException數(shù)據(jù)庫訪問錯誤8.1.3異常處理的使用時機在Java中規(guī)定,其它類型異常必須捕獲處理;RuntimeException可以不做處理也建議不做處理。例如:例8-1:從鍵盤上讀入兩個數(shù),求他們的和異常的使用時機:1)如果是可以預料到的,通過簡單的表達式修改或代碼校驗就可以處理好的,就不必使用異常。8.1.3異常處理的使用時機--22)因為異常占用了JAVA程序的許多處理時間,簡單的測試比處理異常的效率更高。所以,建議將異常用于你無法預料或無法控制的情況(如打開遠程文件,可能會產(chǎn)生FileNotFoundException,而從外設讀入數(shù)據(jù),可能會產(chǎn)生IOException);3)而Error類對象就不必處理,Error的實例是JAVA運行時環(huán)境(JVM)中的內(nèi)部錯誤,通常是致命的,對它們你無法做太多的工作;4)花費時間處理異??赡軙绊懩愕拇a的編寫和執(zhí)行速度,但在稍后的項目和在越來越大的程序中再次使用你的類時,這種額外的小心將會給你帶來極大的回報(當然JAVA類庫是小心編寫的,它已經(jīng)足夠強壯)。例8-1:從鍵盤上讀入兩個數(shù),求他們的和intn1,n2;//使用輸入流,從鍵盤接收數(shù)據(jù)BufferedReaderbr=newBufferedReader(new
InputStreamReader(System.in));System.out.println("PleaseinputfirstIntegerNumber:");try{n1=Integer.parseInt(br.readLine());//從鍵盤接收第一個字符串
System.out.println("PleaseinputsecondIntegerNumber:");
n2=Integer.parseInt(br.readLine());//從鍵盤接收第二個字符串
System.out.println("Thesumis:"+(n1+n2));
}catch(IOExceptione){System.out.println("TheInputiserror!");}
}【運行結果】PleaseinputfirstIntegerNumber:3PleaseinputsecondIntegerNumber:45Thesumis:48異常及其處理-內(nèi)容目錄異常概述異常處理的實施自定義異常8.2異常處理的格式異常處理的基本格式為:try{產(chǎn)生異常的代碼}catch(Exception類或子類異常類實例){處理異常}catch(Exception類或子類異常類實例){處理異常}……finally{代碼}格式說明1.try語句將可能產(chǎn)生異常的代碼放在try{}塊中,這些代碼可能會產(chǎn)生一個或多個異常2.catch語句:catch的參數(shù)為一個Exception類或其子類的實例,當try塊中的代碼出現(xiàn)異常時,將根據(jù)產(chǎn)生的異常類型,從出錯的代碼行處立即轉(zhuǎn)到相配備的catch塊中執(zhí)行。catch塊可以有多個,分別用于捕獲處理不同的異常類型,Java運行時系統(tǒng)將從前至后依次尋找相匹配的catch塊,為了避免遺漏異常,建議將異常類基類Exception放在最后一個catch塊參數(shù)中,用于捕獲前面所有異常處理都不匹配的情況,如:try{產(chǎn)生異常的代碼,可能產(chǎn)生多種異常}catch(FileNotFoundExceptione){處理異常}catch(SQLExceptione){處理異常}……catch(Exceptione){處理異常}//所有遺漏的異常將在這里捕獲但是需要注意,catch(Exceptione)只能放在所有catch塊的最后一句,因為Exception類是所有異常類的父類,它放在前面將會屏蔽所有后面的子類3.fianlly語句:finally塊是可選項,不管try塊中是否產(chǎn)生異常,都要執(zhí)行finally塊的代碼,執(zhí)行過程如圖8-2。圖8-2異常處理執(zhí)行流程tryfinallycatchfinally沒有異常產(chǎn)生異常例8-2:try-catch-finally塊執(zhí)行流程classFinallyDemo{intno1,no2;FinallyDemo(Stringargs[]) {try{no1=Integer.parseInt(args[0]);no2=Integer.parseInt(args[1]);System.out.println("相除結果為"+no1/no2);}catch(ArithmeticExceptione){System.out.println("除數(shù)不能為0");} finally{System.out.println("Finally已執(zhí)行,程序結束!");} }publicstaticvoidmain(Stringargs[]){newFinallyDemo(args);}}【運行過程及結果】DOS提示符>javaFinallyDemo102相除結果為5Finally已執(zhí)行,程序結束!DOS提示符>javaFinallyDemo100除數(shù)不能為0Finally已執(zhí)行,程序結束!8.2.2聲明異常(throws)1、異常調(diào)用鏈2、聲明異?!奥暶鳟惓!笔侵府敭惓T诋惓U{(diào)用鏈中傳遞的時候,為了讓上層的調(diào)用方法知道被調(diào)用方法可能拋出的異常種類,在被調(diào)用方法的聲明后使用throws關鍵字指明要產(chǎn)生的異常種類的操作。Throws關鍵字只是個聲明式的語法,但對于產(chǎn)生自定義異常的方法,它卻是必要的(見8.3節(jié))。例8-3:在divide()方法內(nèi)部進行異常處理例8-4:在主方法main()中進行異常處理main()產(chǎn)生異常的方法調(diào)用異常的方法……程序退出點例8-3:在divide()方法內(nèi)部進行異常處理publicclassExceptionChain{ staticvoiddivide(intx,inty)//在此方法內(nèi)進行了異常處理
{ try{ intz=x/y; System.out.println("theresultis:"+z); } catch(ArithmeticExceptione){System.out.println(e.getMessage());} }publicstaticvoidmain(String[]args){ divide(4,0);}}例8-4:在主方法main()中進行異常處理publicclassExceptionChain{ staticintdivide(intx,inty)throwsArithmeticException//拋出異常
{ returnx/y; }publicstaticvoidmain(String[]args)//在主方法內(nèi)進行了異常處理
{ try{System.out.println(divide(4,0));} catch(ArithmeticExceptione){System.out.println(e.getMessage());}}}使用的語法格式為:throw異常類對象;8.2.3拋出異常(throw)例8-5:throw的用法。publicclassExceptionChain{staticintdivide(intx,inty)throwsArithmeticException{if(y==0) thrownewArithmeticException("除數(shù)不能為0!"); else returnx/y;}publicstaticvoidmain(String[]args){try{System.out.println(divide(4,0));} catch(ArithmeticExceptione){System.out.println(“產(chǎn)生異常:"+e.getMessage());}}}【運行結果】產(chǎn)生異常:除數(shù)不能為0!8.2.4異常類中常用方法Java中的異常類都是Exception類的子類,Exception類的構造方法有兩種:Exception();Exception(Stringmessage);第一種構造方法能創(chuàng)建無返回參數(shù)的異常類對象,第二種構造方法能創(chuàng)建帶參數(shù)的異常類對象。所謂的參數(shù)是指getMessage()方法得到的字符串類型的信息。例如:Exceptione=newException("TheunexpecteddataException");System.out.println(e.getMessage());執(zhí)行后,程序?qū)⑤敵觥癟heunexpecteddataException”。其他輸出信息的常用方法有:toString();printStackTrace();toString()方法以字符串的形式返回異常對象的字符串表示;printStackTrace()方法將異常堆棧跟蹤輸出,包括異常對象的字符串表示和出現(xiàn)異常的語句標號等信息。異常及其處理-內(nèi)容目錄異常概述異常處理的實施自定義異常8.3自定義異常:例8-6classMyArrayExceptionextendsNegativeArraySizeException
//自定義異常類{publicMyArrayException(Stringmessage){super(message);//調(diào)用父類的構造方法初始化message }publicStringgetInfo()//自定義方法{Stringinfo="如看到此信息,請重新創(chuàng)建數(shù)組!"; returninfo; }}publicclassUserDefExceptionDemo//主類{staticintsize; staticinta[];/*檢測數(shù)組下標的方法*/staticvoidcheckArraySize()throwsMyArrayException
{if(size>0)自定義異常:例8-6
{a=newin
溫馨提示
- 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. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 教育行業(yè)2025年人才流失原因與吸引策略研究報告
- 2025-2030中國磷酸二鈉(DSP)行業(yè)市場現(xiàn)狀供需分析及投資評估規(guī)劃分析研究報告
- 2025年社交電商裂變營銷與用戶增長:行業(yè)報告深度解讀
- 部編二年級上冊美術第二單元教學計劃
- 醫(yī)院志愿者服務班級管理計劃
- 人教版數(shù)學知識點復習計劃
- 學校創(chuàng)新教育模式實施計劃
- 二年級可持續(xù)發(fā)展教育計劃
- 軟件開發(fā)團隊技術負責人工作計劃
- 2025高三地理備課組教學計劃
- 艾灸療法課件
- 銀行職業(yè)介紹課件
- 簡述學業(yè)規(guī)劃的意義
- 牧場物語礦石鎮(zhèn)的伙伴們攻略大全
- 大學美育(長春工業(yè)大學)知到智慧樹章節(jié)答案
- 保安禮儀與溝通技巧培訓
- GB/T 30893-2024雨生紅球藻粉
- 超市管理系統(tǒng)數(shù)據(jù)流程圖
- 民法典與生活同行宣傳手冊
- 登高車高空作業(yè)施工方案
- 內(nèi)控評價收集資料清單
評論
0/150
提交評論