版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第六章異常處理,學(xué)習(xí)目標(biāo),1理解錯(cuò)誤和理想是什么。2熟悉異常對(duì)象類(lèi)型和異常處理機(jī)制。3掌握異常處理編程技術(shù)。4您可以設(shè)置自己的例外類(lèi)。6.1例外概述、1、錯(cuò)誤和例外根據(jù)錯(cuò)誤特性將執(zhí)行錯(cuò)誤分為錯(cuò)誤和例外兩類(lèi)茄子。1致命錯(cuò)誤(例如,程序進(jìn)入循環(huán)、遞歸結(jié)束或內(nèi)存溢出)稱(chēng)為錯(cuò)誤。2在運(yùn)算中除數(shù)為零、操作數(shù)超出數(shù)據(jù)范圍、打開(kāi)文件時(shí)沒(méi)有發(fā)現(xiàn)文件、沒(méi)有要加載的類(lèi)文件或者網(wǎng)絡(luò)連接中斷等非致命異常稱(chēng)為異常。1例外發(fā)生程序遇到例外時(shí),生成例外事件,創(chuàng)建例外對(duì)象并將其提交給運(yùn)行系統(tǒng),然后在運(yùn)行系統(tǒng)中查找相應(yīng)的代碼并處理例外。牙齒過(guò)程稱(chēng)為throw(拋出)異常。異常對(duì)象可以由Java虛擬機(jī)創(chuàng)建,也可以由正在運(yùn)行的方法
2、創(chuàng)建。2發(fā)生異常異常后,運(yùn)行時(shí)系統(tǒng)將從生成對(duì)象的代碼開(kāi)始,沿方法的調(diào)用棧層次反向查找異常對(duì)象,直到包含相應(yīng)的處理方法并將異常對(duì)象傳遞給該方法為止。牙齒過(guò)程稱(chēng)為捕獲(catch)異常。3異常處理類(lèi)層次結(jié)構(gòu)Java通過(guò)錯(cuò)誤類(lèi)(Error)和異常類(lèi)(Exception)處理錯(cuò)誤和異常,它們都是Throwable類(lèi)的子類(lèi),分別用于處理兩組異常。它們的層次結(jié)構(gòu)如圖6-1所示。4程序處理錯(cuò)誤和異常的三種茄子方法,程序無(wú)法處理的錯(cuò)誤Error類(lèi)是錯(cuò)誤類(lèi)。程序應(yīng)避免的異常不需要對(duì)運(yùn)行時(shí)異常類(lèi)(RuntimeException)使用try-catch-finally語(yǔ)句,例如數(shù)組超出范圍。應(yīng)盡量避免這些異常,而
3、不是通過(guò)節(jié)目調(diào)試捕獲。必須捕獲的異常某些異常是寫(xiě)入文件時(shí)無(wú)法預(yù)測(cè)的異常(例如,在文件中找不到異常、網(wǎng)絡(luò)通信失敗異常等)。因此,為了確保程序的健壯性,Java必須對(duì)可能出現(xiàn)此類(lèi)異常的代碼使用try-catch-finally語(yǔ)句。否則,編譯將失敗。示例6.1文件中的異常類(lèi)import Java . io . *;public classtry 3 public static void main(string args)file input stream fis=new file input stream(autoexec . bat);system . out . print ln(I can
4、not found this file!);5常見(jiàn)公共異常類(lèi),常見(jiàn)異常類(lèi)是RuntimeException的子類(lèi)。算術(shù)異常ArithmeticException null指針異常NullPointerException類(lèi)型強(qiáng)制轉(zhuǎn)換異常ClassCastException數(shù)組下標(biāo)異常NegativeArraySizeException數(shù)組下標(biāo)異常arrayindexoutofboundseption數(shù)組下標(biāo)異常示例6.2生成數(shù)組下標(biāo)超出范圍的異常和除數(shù)為零的異常,public classtry 1 public static void main(string args)int I=0。Int a
5、=5,6,7,8;for(I=0);i5;I)system . out . print ln(a I=ai);2,try-catch-finally語(yǔ)句用于捕獲和處理異常,在Java的異常處理機(jī)制中提供try-catch-finally語(yǔ)句以捕獲和處理trycatch (excel)語(yǔ)法格式的一個(gè)或多個(gè)異常時(shí)處理的代碼。ExceptionType1表示異常類(lèi),e是該對(duì)象。無(wú)論是否捕獲異常錯(cuò)誤,以后都必須運(yùn)行的代碼。Catch語(yǔ)句可以有一個(gè)或多個(gè)catch語(yǔ)句,但是必須至少有一個(gè)catch語(yǔ)句,才能省略finally語(yǔ)句。Try-catch-finally語(yǔ)句的作用是,當(dāng)Try語(yǔ)句中的代碼生成異
6、常時(shí),根據(jù)異常,由其他catch語(yǔ)句中的代碼捕獲和處理異常。如果沒(méi)有異常,則不會(huì)執(zhí)行catch語(yǔ)句。無(wú)論是否捕獲了異常,都必須運(yùn)行finally的代碼。,示例6.3異常錯(cuò)誤捕獲和處理,public class try 2 public static void main(string args)int I=0;Int a=5,6,7,8;for(I=0);i5;I)try system . out . print ln(a I=ai);catch(arrayindexoutofboundsexceptione)system . out . print ln(數(shù)組下標(biāo)超出范圍例外!);finall
7、ysystem . out . print ln(fianly I=I);try語(yǔ)句try語(yǔ)句大括號(hào)內(nèi)的牙齒代碼可以引發(fā)一個(gè)或多個(gè)異常。也就是說(shuō),如果代碼片段可以在運(yùn)行時(shí)引發(fā)異常,則應(yīng)使用try語(yǔ)句捕獲異常。我們將通過(guò)牙齒示例進(jìn)一步探討try-catch-finally語(yǔ)句和使用時(shí)需要注意的問(wèn)題。catch語(yǔ)句catch語(yǔ)句的參數(shù)類(lèi)似于包含異常類(lèi)型和異常對(duì)象的方法聲明。Catch語(yǔ)句可以有多個(gè)茄子異常,每個(gè)異常都可以處理不同類(lèi)的異常。Java運(yùn)行時(shí)系統(tǒng)從上到下分別檢測(cè)每個(gè)catch語(yǔ)句處理的異常類(lèi)型,直到找到與類(lèi)型匹配的catch語(yǔ)句。如果程序引發(fā)的異常與所有catch處理的異常不匹配,則Ja
8、va虛擬機(jī)將捕獲并處理牙齒異常,這與不使用try-catch-finally語(yǔ)句相同。這顯然不是我們預(yù)期的結(jié)果。因此,通常使用catch語(yǔ)句時(shí),最后捕獲所有名為Exception的異常的超類(lèi),以便異常由對(duì)象本身捕獲和處理。在限制為finally語(yǔ)句try的代碼中,當(dāng)異常發(fā)生時(shí),不會(huì)執(zhí)行后續(xù)代碼。使用Finally語(yǔ)句時(shí),無(wú)論在try指定的節(jié)目塊中發(fā)生異常,還是catch語(yǔ)句中的異常類(lèi)型與遇到的異常類(lèi)型匹配,finally指定的代碼都將執(zhí)行,以提供一致的出口。牙齒的門(mén)可以省略。6.3引發(fā)異常,1,使用throw語(yǔ)句引發(fā)異常throw語(yǔ)句以異常格式throw,其中throw是關(guān)鍵字,是生成的異常類(lèi)
9、對(duì)象。示例6.4異常錯(cuò)誤,public classtry 5 public void run(byte k)byte y=1,I=1;System.out.print(k!=);/換行輸出for(I=1;IByte。MAX_VALUE/i) /Integer類(lèi)的常量,表示最大值throw new Exception(overflow)。/溢出過(guò)程中出現(xiàn)異常else y=(byte)(y * I);catch(exceptione)system . out . print ln(exception : e . get message();e . printstacktrace();/顯示異常信息
10、system . exit(0);system . out . print ln(y);public static void main(string args)try5a=new try 5();for(byte I=1;I10I)a . run(I);2,引發(fā)異常的方法和調(diào)用方法處理異常,引發(fā)異常的方法在方法聲明中附加throws子句,表示引發(fā)異常。具有Throws子句的方法的宣言格式如下:()throws其中throws是關(guān)鍵字,是方法將引發(fā)的異常類(lèi),可以將多個(gè)異常類(lèi)聲明為逗號(hào)分隔符。注:必須在語(yǔ)法和使用方面區(qū)分throws子句和throws。調(diào)用方法處理異常時(shí),異常在一個(gè)方法拋出后向上傳
11、播,并由調(diào)用它的方法處理。示例6.5異常引發(fā)方法和調(diào)用方法處理異常,public classtry 6 public void calc(byte k)throws exception/異常引發(fā)byte y=1,I=1;System.out.print(k!=);for(I=1);IByte。MAX_VALUE/i) /Integer類(lèi)的常量,表示最大值throw new Exception(overflow)。/溢出過(guò)程中出現(xiàn)異常else y=(byte)(y * I);catch(exceptione)system . out . print ln(exception : e . get
12、message();e . printstacktrace();system . exit(0);system . out . print ln(y);Public void run(byte k) /異常try calc(k)捕獲和處理:Catch(exceptione)system . out . print ln(exception 3360 e . gene . printstacktrace();system . exit(0);public static void main(string args)try6a=new try 6();for(byte I=1;I10I)a . ru
13、n(I);3,方法處理異常傳遞系統(tǒng),對(duì)于需要程序處理的異常,通常編寫(xiě)try-catch-finally語(yǔ)句以捕獲和處理。如果程序無(wú)法處理需要系統(tǒng)處理的異常,則可以使用throw語(yǔ)句,使方法拋出異常交叉系統(tǒng)處理。例如,對(duì)于檔案流作業(yè),系統(tǒng)將處理需要捕獲的系統(tǒng)定義的異常。,public class Demo1/異常使用示例static int a,b,c;public static void main(string args)try a=100;b=integer . parseint(args 0);if(b=13)throw(new arithmetic exception();/方法引發(fā)異常
14、c=a/b;system . out . print ln(a/b=c);catch(arrayindexoutofboundsexceptione)system . out . print ln(沒(méi)有命令行第一個(gè)參數(shù));catch(arithmetic exception e)system . out . print ln(算術(shù)錯(cuò)誤);6.4自定義異常類(lèi),Java中已經(jīng)預(yù)定義了很多異常類(lèi),但是在某些情況下,程序員本身不僅必須拋出異常,還必須創(chuàng)建自己的異常類(lèi)。此時(shí),您可以創(chuàng)建Exception的子類(lèi),以定義自己的異常類(lèi)。Java異常類(lèi)系統(tǒng)不包含所需的異常類(lèi)型。用戶必須將自己提供的類(lèi)的例外與其他
15、人提供的例外區(qū)分開(kāi)來(lái)。牙齒類(lèi)型的異常在類(lèi)中多次發(fā)生。使用在其他包中定義的異常類(lèi)會(huì)影響包的獨(dú)立性和自包含性。有一些茄子說(shuō)明,可以告訴讀者何時(shí)需要自定義異常類(lèi)。要滿足以下一個(gè)或多個(gè)條件,您必須考慮定義自己的例外類(lèi):示例6.6自定義異常類(lèi),類(lèi)myexception extends exception/自定義異常類(lèi)my exception()my exception(string msg)super(msg)Class UsingMyException /引發(fā)異常類(lèi)void f()throws my exception system . out . print ln(throws my excepti
16、on from f()Throwvoid g()throws my exception system . out . print ln(throws my exception from g();throw new my exception(originated in g();Public class TestMyException /捕獲和處理異常錯(cuò)誤public static voidmain(string args)using my exception m=new using my exception()catch(my exceptione)e . print stack trace()
17、;try m . g();catch(my exceptione)e . print stack trace();6.5項(xiàng)目擴(kuò)展,public class shuzu Yichang public static void main(string args)intnums=new int 10;for(int I=0);I=10I)try num si=I 1;catch(arrayindexoutofboundsexceptione)system . out . print ln(數(shù)組下標(biāo)超出限制導(dǎo)致異常:e);finally if(i10)system . out . print ln(I=I,num si=num si);編寫(xiě)捕獲和處理數(shù)組下標(biāo)超出范圍的異常的程序,如下所示:(1)打開(kāi)“記事本”軟件,然后輸入以下節(jié)目?jī)?nèi)容:(2)以上程序中定義的數(shù)組范圍為number0number9。當(dāng)I循環(huán)到10時(shí),數(shù)組超出限
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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-2030贊比亞鈷礦資源供應(yīng)鏈風(fēng)險(xiǎn)預(yù)警與應(yīng)對(duì)策略
- 2025-2030西班牙旅游行業(yè)消費(fèi)者行為與市場(chǎng)競(jìng)爭(zhēng)格局評(píng)估報(bào)告
- 2025-2030西班牙房地產(chǎn)行業(yè)市場(chǎng)發(fā)展趨勢(shì)分析及投資評(píng)估報(bào)告
- 2025-2030西歐食品加工業(yè)數(shù)字化轉(zhuǎn)型實(shí)施方案與潛力分析研究
- 2025-2030西南智能智能照明控制系統(tǒng)行業(yè)市場(chǎng)發(fā)展趨勢(shì)分析及投資機(jī)會(huì)規(guī)劃報(bào)告
- 2025-2030西南便攜式游戲設(shè)備生產(chǎn)商市場(chǎng)競(jìng)爭(zhēng)技術(shù)觸屏行業(yè)品牌投資評(píng)估報(bào)告
- 2025-2030血管內(nèi)超聲(IVUS)人工智能融合應(yīng)用與智能化發(fā)展趨勢(shì)報(bào)告
- 2025-2030葡萄酒釀造工藝參數(shù)優(yōu)化與風(fēng)味物質(zhì)形成機(jī)制
- 2025-2030葡萄牙葡萄酒釀造行業(yè)市場(chǎng)調(diào)研與發(fā)展規(guī)劃分析
- 2025-2030葡萄牙移動(dòng)醫(yī)療診斷設(shè)備行業(yè)市場(chǎng)發(fā)展環(huán)境需求調(diào)研及投資策略規(guī)劃分析報(bào)告
- 職業(yè)培訓(xùn)機(jī)構(gòu)五年發(fā)展策略
- 《小盒子大舞臺(tái)》參考課件
- 任捷臨床研究(基礎(chǔ)篇)
- 供應(yīng)鏈危機(jī)應(yīng)對(duì)預(yù)案
- DBJ41-T 263-2022 城市房屋建筑和市政基礎(chǔ)設(shè)施工程及道路揚(yáng)塵污染防治差異化評(píng)價(jià)標(biāo)準(zhǔn) 河南省工程建設(shè)標(biāo)準(zhǔn)(住建廳版)
- 砌筑工技能競(jìng)賽理論考試題庫(kù)(含答案)
- 水工鋼結(jié)構(gòu)平面鋼閘門(mén)設(shè)計(jì)計(jì)算書(shū)
- JJG 291-2018溶解氧測(cè)定儀
- 《抗體偶聯(lián)藥物》課件
- 《肺癌的診斷與治療》課件
- 音響質(zhì)量保證措施
評(píng)論
0/150
提交評(píng)論