版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
常用類應(yīng)用單元五JavaAPI文檔使用String類StringBuffer類目錄CONTENTS123異常處理45.4異常處理
根據(jù)在程序運(yùn)行過程中,經(jīng)常會(huì)出現(xiàn)一些意外的情況,這些意外會(huì)導(dǎo)致程序出錯(cuò)或者崩潰,從而影響程序的正常執(zhí)行,如果不能很好地處理這些意外情況,程序的穩(wěn)定性就會(huì)受到質(zhì)疑。在Java語言中,將這些程序意外稱為異常,出現(xiàn)異常時(shí)的處理稱為異常處理,合理的異常處理可以使整個(gè)項(xiàng)目更加穩(wěn)定,也使項(xiàng)目中正常的邏輯代碼和錯(cuò)誤處理的代碼實(shí)現(xiàn)分離,便于代碼的閱讀和維護(hù)。5.4.1異常概述publicclassTestEx{publicstaticvoidmain(String[]args){Stringteachers[]={"柳海龍","孫傳杰","孫悅"};for(inti=0;i<4;i++){System.out.println(teachers[i]);}System.out.println("演示完畢!");}}示例代碼:運(yùn)行結(jié)果:程序出錯(cuò)的原因很簡(jiǎn)單,程序員定義的數(shù)組長(zhǎng)度是3,而在使用數(shù)組時(shí),卻訪問了下標(biāo)為3的第4個(gè)數(shù)組元素,所以程序出現(xiàn)異常。5.4.1異常概述所有異常都繼承自java.lang.Throwable類,Throwable類有兩個(gè)直接子類,Error類和Exception類。Java異常的層次結(jié)構(gòu)如圖所示。Java異常層次結(jié)構(gòu)圖5.4.1異常概述Exception,Error表示Java應(yīng)用程序本身無法恢復(fù)的嚴(yán)重錯(cuò)誤,而不是這種Java應(yīng)用程序無法恢復(fù)的嚴(yán)重錯(cuò)誤,我們稱為異常。異??煞譃檫\(yùn)行時(shí)異常(RuntimeException)和檢查時(shí)異常(CheckedException)兩種。RuntimeException,運(yùn)行時(shí)異常即程序運(yùn)行時(shí)拋出的異常,不要求程序員在編程時(shí)必須對(duì)這些異常進(jìn)行處理,也能編譯通過。前面數(shù)組下標(biāo)越界異常就是運(yùn)行時(shí)異常。CheckedException,檢查時(shí)異常又稱為非運(yùn)行時(shí)異常,這樣的異常要求程序員必須在編程時(shí)進(jìn)行處理,否則就會(huì)編譯不通過。例如我們?cè)谇懊娴膶W(xué)習(xí)過程中,經(jīng)常在編譯的時(shí)候發(fā)生類找不到的情況,這就是一個(gè)典型的檢查時(shí)異常。5.4.2異常處理所謂異常處理,就是發(fā)生異常之后,程序員要求程序該如何操作。Java對(duì)異常的處理采取的是拋出、捕獲的機(jī)制,即由一段可能拋出異常的程序拋出異常(也可能正常執(zhí)行,不拋出異常),在這段程序外有專門的異常處理程序進(jìn)行處理,針對(duì)拋出的不同類型的異常捕獲后進(jìn)行處理,這就是Java異常處理機(jī)制。try{//可能拋出異常的語句塊}catch(SomeExceptionle)//SomeException1特指某些異常,非Java中具體異常,下同{//當(dāng)捕獲到Somefixception1類型的異常時(shí)執(zhí)行的語句塊}catch(SomeException2e){//當(dāng)捕獲到SomeException2類型的異常時(shí)執(zhí)行的語句塊}finally{//無論是否發(fā)生異常都會(huì)執(zhí)行的代碼}語法格式:5.4.2異常處理則修改實(shí)例代碼如下:publicclassTestEx10{publicstaticvoidmain(Strmg[]args){try{Stringteachers[]={"柳海龍","孫傳杰","孫悅"};for(inti=0;i<4;i++){System.out.println(teachers[i]);}}catch(Exceptione){System.out.println("數(shù)組下標(biāo)越界,請(qǐng)修改程序!");//return; //finally語句塊仍然執(zhí)行//System.exit(l);//直接退出Java虛擬機(jī),finally語句塊不再執(zhí)行}finally{System.out.println("顯示完畢!");}}}運(yùn)行結(jié)果:5.4.3異常使用注意事項(xiàng)我們?cè)诓东@異常的時(shí)候,應(yīng)該按照“從小到大”的順序捕獲異常,這樣才能保證逐層捕獲,從而避免父類的大的異常進(jìn)行了捕獲,導(dǎo)致子類的小的異常無法進(jìn)行捕獲的情況。異常類異常說明ArrayIndexOutOfBoundsException在訪問數(shù)組元素時(shí)超過了一開始聲明這個(gè)數(shù)組時(shí)的范圍ArithmeticException發(fā)生在數(shù)字的算術(shù)運(yùn)算時(shí)的異常NullPointerException調(diào)用了未經(jīng)初始化的對(duì)象或者是不存在的對(duì)象,或是訪問或修改null對(duì)象的屬性。ClassNotFoundException沒有找到類IllegalArgumentException向方法傳遞了一個(gè)不合法或不正確的參數(shù)InputMismatchException表明Scanner獲取的內(nèi)容與期望類型的模式不匹配,或者該內(nèi)容超出期望類型的范圍。IllegalAccessException當(dāng)前正在執(zhí)行的方法無法訪問指定類、屬性、方法或構(gòu)造方法的定義ClassCastException試圖將對(duì)象強(qiáng)制轉(zhuǎn)換為不是實(shí)例的子類SQLException提供關(guān)于數(shù)據(jù)庫訪問錯(cuò)誤或其他錯(cuò)誤信息的異常IOException發(fā)生某種I/O異常常見的異常5.4.4拋出異常在Java語言中,可以使用throw關(guān)鍵字手工拋出一個(gè)異常。publicclassTestEx15{publicstaticvoidmain(String[]args){System.out.print("Now");try{System.out.print("is");thrownewNullPointerException("the"); //拋出
一個(gè)空指針異常,指定信息為“the”//System.out.print("此句不會(huì)被執(zhí)行!");}catch(NullPointerExceptione){ //捕獲拋出的空指針異常System.out.print(e.getMessage());}System.out.print(utime.\n");}}示例代碼:運(yùn)行結(jié)果:5.4.5自定義異常類自定義異常,顧名思義,就是程序員自己定義的異常。當(dāng)Java類庫中的異常不能滿足程序需求時(shí),程序員可以自己定義并使用異常。由于Exception類是Java中所有異常類的父類,所以我們定義自定義異常類時(shí),通常繼承自該類。現(xiàn)在我們定義一個(gè)自定義異常類AgeException,它有一個(gè)構(gòu)造函數(shù)和一個(gè)toString()方法,具體代碼如下://自定義異常類,處理年齡大于120或小于0的PersonclassAgeExceptionextendsException{privateStringmessage;publicAgeException(intage) //自定義異常類構(gòu)造方法{message="年齡設(shè)置為:"+age+"不合理!";}publicStringtoString() //自定義異常類toString()方法{returnmessage;}}5.4.5自定義異常類接下來我們通過Person類和TestEx19這兩個(gè)類,來使用這個(gè)自定義異常類。classPerson{privateintage;//聲明setAge(intage)方法可能拋出AgeException自定義異常publicvoidsetAge(intage)throwsAgeException{if(age<=0||age>=120){thrownewAgeException(age);//拋出
AgeException自定義異常}else{this.age=age;}}publicintgetAge(){returnage;}}publicclassTestEx19{publicstaticvoidmain(String[]args){Personp1=newPerson();Personp2=newPerson();try{pl.setAge(150); //會(huì)拋出AgeException自定義異常System.out.println("正確輸出年齡為:"+pl.getAge());}catch(AgeExceptione){//進(jìn)行異常捕獲處理System.out.println(e.to
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度行政合同行政主體特權(quán)在緊急情況下的適用合同4篇
- 2025版小學(xué)操場(chǎng)運(yùn)動(dòng)設(shè)施更新與維修合同3篇
- 體育會(huì)展客戶關(guān)系管理考核試卷
- 光纖通信在智能電網(wǎng)故障診斷中的應(yīng)用考核試卷
- 2025年土地轉(zhuǎn)讓合同
- 2025版停車場(chǎng)消防設(shè)施建設(shè)與維護(hù)服務(wù)合同3篇
- 2025版木工材料研發(fā)與勞務(wù)合作合同范本3篇
- 2025年寫作創(chuàng)作分期付款合同
- 2025年加盟代理合約協(xié)議
- 2025年家庭矛盾仲裁協(xié)議
- 油氣行業(yè)人才需求預(yù)測(cè)-洞察分析
- 《數(shù)據(jù)采集技術(shù)》課件-Scrapy 框架的基本操作
- 2025年河北省單招語文模擬測(cè)試二(原卷版)
- 高一化學(xué)《活潑的金屬單質(zhì)-鈉》分層練習(xí)含答案解析
- DB34∕T 4010-2021 水利工程外觀質(zhì)量評(píng)定規(guī)程
- 理論力學(xué)智慧樹知到期末考試答案章節(jié)答案2024年中國(guó)石油大學(xué)(華東)
- 2024老年人靜脈血栓栓塞癥防治中國(guó)專家共識(shí)(完整版)
- 四年級(jí)上冊(cè)脫式計(jì)算100題及答案
- 上海市12校2023-2024學(xué)年高考生物一模試卷含解析
- 儲(chǔ)能電站火災(zāi)應(yīng)急預(yù)案演練
- 人教版(新插圖)二年級(jí)下冊(cè)數(shù)學(xué) 第4課時(shí)用“進(jìn)一法”和“去尾法”解決簡(jiǎn)單的實(shí)際問題 教學(xué)課件
評(píng)論
0/150
提交評(píng)論