版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第七章異常處理
7.1異常的概念
7.2異常處理1教學(xué)目的和要求:理解什么是異常,了解異常發(fā)生的原因
掌握J(rèn)ava異常處理的機(jī)制
創(chuàng)建自己的異常類2重點(diǎn):Java異常處理機(jī)制;Java內(nèi)置異常類;如何自定義異常難點(diǎn): 理解異常處理塊中各個(gè)語(yǔ)句塊的作用教學(xué)重點(diǎn)與難點(diǎn)
31 PublicclassHelloWorld{2 publicstaticvoidmain(Stringargs[]){3 inti=0;4 Stringg[]={"HelloWorld!","Hello!",5 "HELLOWORLD!"};6 while(i<4){7 System.out.println(g[i]);8 i++;9 }10 }11 }HelloWorld!Hello!HELLOWORLD!Java.lang.ArrayIndexOutOfBoundsException atHelloWorld.main(HelloWorld.java:7)4
7.1異常的概念異常(Exception)也稱為例外,是一種程序運(yùn)行時(shí)的錯(cuò)誤。例如:試圖打開的文件找不到內(nèi)存空間不足除數(shù)為零用戶輸入數(shù)據(jù)錯(cuò)誤在傳統(tǒng)的編程中,由于沒有異常處理機(jī)制,一旦出現(xiàn)異常,程序?qū)⒅兄?。而我們希望程序不要因?yàn)橐粋€(gè)小錯(cuò)誤就停止運(yùn)行。當(dāng)錯(cuò)誤發(fā)生時(shí),程序能夠自動(dòng)處理,或者能夠向用戶提供一些與錯(cuò)誤相關(guān)的信息。5
7.1.1Java異常處理機(jī)制
Java語(yǔ)言是一種容錯(cuò)性很強(qiáng)的語(yǔ)言,其中引入了異常處理機(jī)制。
Java的異常處理也是面向?qū)ο蟮?,?dāng)一個(gè)異常發(fā)生時(shí)程序會(huì)生成一個(gè)異常對(duì)象,稱之為拋出(throw)一個(gè)異常。異常處理的核心思想是:捕獲(Catch)
經(jīng)預(yù)先判斷可能出錯(cuò)的代碼段中可能產(chǎn)生的異常。6
Java異常處理由5個(gè)關(guān)鍵字實(shí)現(xiàn):try、catch、throw、throws和finally。其中try用來執(zhí)行一段程序,如果出現(xiàn)異常,則系統(tǒng)拋出(throw)一個(gè)異常對(duì)象,可以根據(jù)該對(duì)象的類型來捕獲(catch)它并處理它。最后由finally語(yǔ)句塊來進(jìn)行收尾工作。下面是異常處理塊的基本形式:
try{//可能產(chǎn)生異常的代碼塊thrownewExceptionType1();//拋出ExceptionType1類型的異常
}catch(ExceptionType1e){//捕獲并處理ExceptionType1類型的異常。該代碼段不一定會(huì)執(zhí)行
}catch(ExceptionType2e){//捕獲并處理ExceptionType2類型的異常。該代碼段不一定會(huì)執(zhí)行
}finally{//收尾工作,釋放資源。該代碼段一定會(huì)執(zhí)行
}7
importjava.io.*; publicclassE7_1{ publicstaticvoidmain(Stringargs[]){
intb; try{
FileInputStream
fis=new
FileInputStream("test.txt"); while((b=fis.read())!=-1)
System.out.print((char)b);
fis.close(); } catch(Exceptione){
system.out.println("出錯(cuò)了,原因是:");
system.out.println(e.toString()); }} }8
Java異常處理機(jī)制是面向?qū)ο蟮?。每發(fā)生一起異常就產(chǎn)生一個(gè)異常對(duì)象。在Java類庫(kù)中定義了很多異常類。注意:所有異常類都是類
java.lang.Throwable
的子類。
ThrowableErrorExceptionVirtualMachineErrorAWTErrorRuntimeExceptionIOExceptionEOFExceptionFileNotFoundExceptionArithmeticExceptionNullPointerExceptionIndexOutOfBoundsException
7.1.2內(nèi)置異常類LinkageErrorOutOfMemoryErrorStackOverflowErrorClassNotFoundExceptionAWTException9Throwable
類有兩個(gè)直接子類:子類
Error代表一些很難恢復(fù)的嚴(yán)重的系統(tǒng)錯(cuò)誤,不是用戶程序本身所能控制的。所以一般不用捕獲與處理Error,而是交給Java運(yùn)行系統(tǒng)處理。子類Exception代表用戶程序可以捕獲的異常情況。子類RuntimeException代表程序設(shè)計(jì)或?qū)崿F(xiàn)上的問題,如除數(shù)為零或者數(shù)組越界等。這類異常經(jīng)常出現(xiàn),如果全部做出處理,會(huì)影響程序的可讀性和效率。所以這類異常,程序可以處理,也可以交給Java運(yùn)行系統(tǒng)自動(dòng)處理。其他子類(例如IOException,ClassNotFoundException
等)程序中必須捕獲并處理這些異常,或者聲明拋棄這些異常。ErrorExceptionRuntimeExceptionThrowableIOExceptionClassNotFoundException……107.2異常處理7.2.1捕獲異常7.2.2聲明拋棄異常7.2.3顯示拋出異常7.2.4自定義異常117.2.1捕獲異常捕獲異常是通過try-catch-finally語(yǔ)句實(shí)現(xiàn)的。其中try語(yǔ)句不能單獨(dú)使用,必須和catch或者finally語(yǔ)句配合使用。為了防止并處理一個(gè)運(yùn)行時(shí)的錯(cuò)誤,需要把可能出錯(cuò)的代碼放進(jìn)try語(yǔ)句塊中。當(dāng)try語(yǔ)句塊中的某條語(yǔ)句發(fā)生異常,該塊中余下的語(yǔ)句將不再執(zhí)行,而是轉(zhuǎn)到catch語(yǔ)句中去執(zhí)行。12
importjava.io.*; publicclassE7_3{ publicstaticvoidmain(String
args[]){ try{
inti=7/0;
System.out.println("該語(yǔ)句會(huì)不會(huì)執(zhí)行?"); } catch(ArithmeticExceptione){
System.out.println("出現(xiàn)錯(cuò)誤:" +e.getMessage()); }} }try語(yǔ)句塊catch語(yǔ)句塊13catch語(yǔ)句catch(ArithmeticException
e)catch之后的括號(hào)中是一個(gè)參數(shù)e,e是算術(shù)異常類的一個(gè)對(duì)象。當(dāng)try語(yǔ)句塊中有異常發(fā)生時(shí),Java系統(tǒng)會(huì)自動(dòng)拋出一個(gè)異常對(duì)象;然后系統(tǒng)把這個(gè)異常對(duì)象的類型與catch塊中的異常類型進(jìn)行比較,如果匹配,則把拋出的異常對(duì)象傳遞給參數(shù)e。最后再執(zhí)行catch語(yǔ)句塊中的語(yǔ)句進(jìn)行異常的處理。14多條catch語(yǔ)句如果try語(yǔ)句塊中可能發(fā)生多種異常,則可以使用多個(gè)catch語(yǔ)句分別捕獲;如果這些異常具有繼承關(guān)系,則必須先捕獲子類型的異常,再捕獲父類型的異常。15
publicclassE7_5{ publicstaticvoidmain(String
args[]){ try{
inti=7/0;
System.out.println("該語(yǔ)句會(huì)不會(huì)執(zhí)行?"); } catch(Exceptione){
System.out.println(e); } catch(ArithmeticExceptione){
System.out.println(e); }} }16finally語(yǔ)句塊
finally語(yǔ)句在異常處理機(jī)制中起到收尾工作,用來保證程序的正確性。例如打開一個(gè)文件失敗,程序處理完異常之后就會(huì)退出,但是這時(shí)如果文件還沒有關(guān)閉,這樣可能會(huì)造成文件內(nèi)容的遺失,所以必須先關(guān)閉該文件,才能退出異常的處理。而關(guān)閉文件的操作就放在finally語(yǔ)句塊中。17importjava.io.*;publicclassE7_6{ publicstaticvoidmain(String
args[]){ try{
inti=7/0;
FileInputStreamf=newFileInputStream("test.txt"); } catch(ArithmeticExceptione){
System.out.println(e); } catch(FileNotFoundExceptione){
System.out.println(e); } finally{
System.out.println("finally"); }} }187.2.2聲明拋棄異常如果一個(gè)方法method()中可能產(chǎn)生一個(gè)異常,但是method()本身又不愿意或者沒有能力處理該異常。則method()方法可以聲明拋棄該異常,將該異常交給調(diào)用它的其他方法去處理。19importjava.io.*;publicclassE7_7{ voidmethod()throwsFileNotFoundException{
FileInputStreamf=newFileInputStream("test.txt"); } publicstaticvoidmain(String
args[]){ try{ E7_7i=newE7_7();
i.method(); } catch(FileNotFoundExceptione){
System.out.println(e); } }}20importjava.io.*;publicclassE7_8{ voidmethod()throwsFileNotFoundException{
FileInputStreamf=newFileInputStream("test.txt"); } publicstaticvoidmain(String
args[])throws
FileNotFoundException
{ E7_8i=newE7_8();
i.method(); }}Java運(yùn)行系統(tǒng)如果要一次拋棄多個(gè)異常,則用逗號(hào)分隔開,如下所示:voidmethod()throwsIOException,FileNotFoundException{}217.2.3顯示拋出異常通常,異常對(duì)象是由Java系統(tǒng)自動(dòng)拋出(throw)的。程序員也可以在程序中根據(jù)條件顯示拋出(throw)一個(gè)異常。throw語(yǔ)句之后的語(yǔ)句將不再執(zhí)行,轉(zhuǎn)到catch語(yǔ)句塊中去執(zhí)行。22importjava.io.*;publicclassE7_9{ voidmethod()throwsFileNotFoundException{ Strings=newString(); if(s.equals(""))
thrownewFileNotFoundException(); } publicstaticvoidmain(String
args[])throwsFileNotFoundException
{ E7_9i=newE7_9();
i.method(); }}thrownew異常類();237.2.4自定義異常前面,我們討論的都是由Java
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度農(nóng)業(yè)保險(xiǎn)代理與服務(wù)合同
- 2025年度高端制造裝備研發(fā)股權(quán)投資及市場(chǎng)拓展合同
- 二零二五年度南昌商品房買賣合同2025版標(biāo)準(zhǔn)文本
- 2025年度個(gè)人門面出租合同附贈(zèng)增值服務(wù)范本3篇
- 2025年度鋼材運(yùn)輸服務(wù)合同模板
- 二零二五年度跨境電商進(jìn)口生鮮食品采購(gòu)合同范本4篇
- 華為認(rèn)證智能協(xié)作中級(jí) HCIP-Collaboration H11-861考試題庫(kù)及答案
- 2025年度汽車租賃車輛租賃價(jià)格調(diào)整合同6篇
- 2025年度模具行業(yè)學(xué)徒培養(yǎng)用工合同示范4篇
- 2025年度南匯工商行政管理志編纂服務(wù)合同4篇
- 農(nóng)村自建房安全合同協(xié)議書
- 《教科版》二年級(jí)科學(xué)下冊(cè)全冊(cè)課件(完整版)
- 杜仲葉藥理作用及臨床應(yīng)用研究進(jìn)展
- 4S店售后服務(wù)6S管理新規(guī)制度
- 高性能建筑鋼材的研發(fā)與應(yīng)用
- 無線廣播行業(yè)現(xiàn)狀分析
- 漢語(yǔ)言溝通發(fā)展量表(長(zhǎng)表)-詞匯及手勢(shì)(8-16月齡)
- 高速公路相關(guān)知識(shí)講座
- 兒科關(guān)于抗生素使用的PDCA
- 小學(xué)生必備古詩(shī)
- 手術(shù)室護(hù)理實(shí)踐指南2023年
評(píng)論
0/150
提交評(píng)論