Java異常處理 第四章_第1頁
Java異常處理 第四章_第2頁
Java異常處理 第四章_第3頁
Java異常處理 第四章_第4頁
Java異常處理 第四章_第5頁
已閱讀5頁,還剩20頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

Java異常處理第四章教學(xué)目標(biāo)4.1Exception的概念、子類及其繼承關(guān)系4.2面向?qū)ο蟮漠惓L幚頇C(jī)制4.3創(chuàng)建自定義異常教學(xué)目標(biāo)4.1Exception的概念、子類及其繼承關(guān)系4.1.1

Exception的概念4.1.2

Exception的分類4.1.3

Exception的繼承關(guān)系和層次4.1.4方法調(diào)用堆棧4.2面向?qū)ο蟮漠惓L幚頇C(jī)制4.2.1

異常處理語句(try-catch-finally)4.2.2

在方法首部用throws拋出異常4.2.3在方法體中用throw手工拋出異常4.2.4程序示例4.3自定義異常引言在進(jìn)行程序設(shè)計(jì)時(shí),錯(cuò)誤的產(chǎn)生是不可避免的,如何處理錯(cuò)誤?把錯(cuò)誤交給誰去處理?程序又該如何從錯(cuò)誤中恢復(fù)?這是任何程序設(shè)計(jì)語言都要解決的問題。以面向過程語言-C語言為例,一般通過使用if語句來判斷是否出現(xiàn)了錯(cuò)誤,同時(shí),調(diào)用函數(shù)通過被調(diào)用函數(shù)的返回值感知在被調(diào)用函數(shù)中產(chǎn)生的錯(cuò)誤事件并進(jìn)行處理。沒有錯(cuò)誤處理的程序:{openTheFile;determineitssize;allocatethatmuchmemory;read-filecloseTheFile;

}引言openFiles;if(theFilesOpen){determinethelengthofthefile;if(gotTheFileLength){allocatethatmuchmemory;if(gotEnoughMemory){readthefileintomemory;if(readFailed)errorCode=-1;elseerrorCode=-2;}elseerrorCode=-3;}elseerrorCode=-4;}elseerrorCode=-5;try{

openTheFile;determineitssize;allocatethatmuchmemory;read-File;closeTheFile;}catch(fileopenFailed){dosomething;}catch(sizeDetermineFailed){dosomething;}catch(memoryAllocateFailed){dosomething;}catch(readFailed){dosomething;}catch(fileCloseFailed){dosomething;}finally{dosomething;}面向過程和面向?qū)ο螽惓L幚頇C(jī)制對(duì)比4.1.1Exception的概念異常(Exception)是指程序運(yùn)行過程中出現(xiàn)的可能發(fā)生會(huì)打斷程序正常執(zhí)行的事件或現(xiàn)象,例如用戶輸入錯(cuò)誤、除數(shù)為零、需要處理的文件不存在、數(shù)組下標(biāo)越界、內(nèi)存不足等。為了加強(qiáng)程序的魯棒性(Robust),程序設(shè)計(jì)時(shí),必須考慮到可能發(fā)生的異常(Abnormal)事件并做出相應(yīng)的處理。Java提供了功能強(qiáng)大的面向?qū)ο螽惓L幚頇C(jī)制,可以方便地在程序中監(jiān)視可能發(fā)生異常的程序塊,并將所有異常處理的代碼集中放置在程序某處,使完成正常功能的程序代碼與進(jìn)行異常處理的程序代碼分開,便于程序的閱讀、修改和維護(hù)。4.1.1Exception的概念在Java中將異常情況分為Error和Exception兩大類。Error類:指較少發(fā)生的內(nèi)部系統(tǒng)錯(cuò)誤,由JVM生成并拋出,包括動(dòng)態(tài)鏈接失敗、JVM內(nèi)部錯(cuò)誤、資源耗盡等嚴(yán)重情況,程序員無能為力,只能讓程序終止。Exception類:解決由程序本身及環(huán)境所產(chǎn)生的異常,有補(bǔ)救或控制的可能,程序員也可預(yù)先防范。ThrowableErrorExceptionRuntimeExceptionIOExceptionObject4.1.1Exception的概念Throwable類:具體請(qǐng)參考幫助文檔。構(gòu)造方法:Throwable()構(gòu)造方法:Throwable(Stringmessage)StringtoString():返回形如“classname”@“getMessage()”的信息。StringgetMessage():返回有關(guān)異常事件的信息。StringgetLocalizedMessage()voidprintStackTrace():用來跟蹤異常事件發(fā)生時(shí)的執(zhí)行堆棧的內(nèi)容voidprintStackTrace(PrintStream

s)voidprintStackTrace(PrintWriters)ThrowablefillInStackTrace()4.1.2Exception的分類Java語言中Exception可以分為:檢查性異常(CheckedException):一般程序中可預(yù)知的問題,其產(chǎn)生的例外可能會(huì)帶來意想不到的結(jié)果,因此Java編譯器要求Java程序必須捕獲或聲明所有的非運(yùn)行時(shí)異常必須進(jìn)行異常處理,否則編譯不能通過。例如以IOException為代表的一些類如FileNotFoundException、用戶連接數(shù)據(jù)庫時(shí)產(chǎn)生的SQLException等。非檢查性異常(UncheckedException):以RuntimeException為代表的一些類,編譯時(shí)發(fā)現(xiàn)不了,只在能運(yùn)行時(shí)才能發(fā)現(xiàn)。RuntimeException:Java虛擬機(jī)在運(yùn)行時(shí)生成的例外,如被0除等系統(tǒng)錯(cuò)誤、數(shù)組下標(biāo)超范圍等,其產(chǎn)生比較頻繁,處理麻煩,對(duì)程序可讀性和運(yùn)行效率影響不太大。因此由系統(tǒng)檢測(cè),用戶可不做處理,系統(tǒng)將它們交給缺省的異常處理程序(當(dāng)然,必要時(shí),用戶可對(duì)其處理)。

ClassNotFoundExceptionClassNotSupportedExceptionIllegalAccessExceptionIntantiationExceptionInterruptedExceptionNoSuchMethodExceptionRuntimeExceptionArithmeticExceptionArrayStoreExceptionIllegalArgumentExceptionIllegalThreadStateExceptionNumberFormatExceptionIndexOutOfBoundsExceptionArrayIndexOutOfBoundsExceptionStringIndexOutBoundsExceptionNegativeArraySizeExceptionNullPointerExceptionSecurityException4.1.2Exception的分類4.1.2Exception的分類Java程序異常處理的原則:對(duì)于Error和RuntimeException,可以在程序中進(jìn)行捕獲和處理,但不是必須的。對(duì)于IOException及其他異常,必須在程序進(jìn)行捕獲和處理,否則,程序不能通過編譯。異常處理機(jī)制主要處理檢查性異常。我們可以從JDK幫助文檔中查找一個(gè)方法可能拋出的異常,然后有針對(duì)性的處理。例程:ZeroExceptionTest.java例程:TestIOExcption1.java說明:從當(dāng)前文件夾文本文件test1.txt讀出內(nèi)容,輸出到屏幕上。由于沒有檢測(cè)異常FileNotFoundException和IOException并做出處理,編譯不能通過。4.1.4方法調(diào)用堆棧例程:code\MethodCallTest.java01publicclassTest{02int[]arr=newint[3];03publicstaticvoidmain(String[]args){04newTest().methodOne();05System.out.println("main");06}07publicvoidmethodOne(){08methodTwo();09System.out.println("One");10}11publicvoidmethodTwo(){12methodThree();13System.out.println("Two");14}15publicvoidmethodThree(){16System.out.println(arr[3]);17System.out.println("Three");18}19}4.1.4方法調(diào)用堆棧Exceptioninthread"main"java.lang.ArrayIndexOutOfBoundsException:5 atSle.methodThree(Sle.java:17) atSle.methodTwo(Sle.java:13) atSle.methodOne(Sle.java:9) atSle.main(Sle.java:5)Pressanykeytocontinue...methiodThree()methiodTwo()methiodOne()main()教學(xué)目標(biāo)4.1Exception的概念、子類及其繼承關(guān)系4.1.1

Exception的概念4.1.2

Exception的分類4.1.3

Exception的繼承關(guān)系和層次4.1.4方法調(diào)用堆棧4.2面向?qū)ο蟮漠惓L幚頇C(jī)制4.2.1

異常處理語句(try-catch-finally)4.2.2

在方法首部用throws拋出異常4.2.3在方法體中用throw手工拋出異常4.2.4程序示例4.3自定義異常4.2面向?qū)ο蟮漠惓L幚頇C(jī)制異常處理的方法:使用try…catch…finally結(jié)構(gòu)對(duì)異常進(jìn)行捕獲和處理。在方法聲明首部用throws聲明拋出異常:JVM將類載入內(nèi)存,調(diào)用main()類的入口方法,main()方法調(diào)用其它方法。異常處理機(jī)制采用誰調(diào)用,誰就負(fù)責(zé)處理被調(diào)用方法拋出的異常。在方法體中用throw手工拋出異常。4.2.1

異常處理語句(try-catch-finally)1.try…catch…finally結(jié)構(gòu)語法格式:try{......//codethatmightgenerateexception}catch(type1id1){......//handleexceptionoftype1}catch(type2id2){......//handleexceptionoftype2}[finally{//activitiesthathappeneverytime}]4.2.1

異常處理語句(try-catch-finally)finally{}的語句塊無論異常是否發(fā)生都要執(zhí)行,是try…catch的統(tǒng)一出口,一般用來處理“善后處理”,例如釋放資源,關(guān)閉使用完的文件等。一個(gè)try語句塊可對(duì)應(yīng)多個(gè)catch塊,用于對(duì)多個(gè)異常類進(jìn)行捕獲。如果要捕獲的異常類之間有父子繼承關(guān)系時(shí),應(yīng)該將子類的catch塊放置在父類的catch塊之前。例程:TestIOExcption2.java說明:使用try...catch…finally結(jié)構(gòu)處理異常。4.2.1

異常處理語句(try-catch-finally)try塊finally塊發(fā)生異常無異常通常在finally塊中編寫將資源返還給系統(tǒng)的語句,它一般包括:釋放動(dòng)態(tài)分配的內(nèi)存塊關(guān)閉文件關(guān)閉數(shù)據(jù)庫結(jié)果集關(guān)閉與數(shù)據(jù)庫建立的連接catch塊……catch塊4.2.2

在方法首部用throws聲明拋出異常2.throws聲明拋出異常:如果一個(gè)方法沒有捕獲可能引發(fā)的異常,調(diào)用該方法的其他方法應(yīng)該捕獲并處理該異常。這就需要聲明方法的時(shí)候,使用throws選項(xiàng),以拋出該異常。語法格式:<modifiers><return_type><name>([<argu_list>])throwsException{[<statements>]}例程:TestIOExcption3.java說明:在main()方法定義首部聲明拋出異常FileNotFoundException,IOException,誰調(diào)用誰處理。例程:TestIOExcption4.java說明:將功能進(jìn)行劃分,main()只負(fù)責(zé)測(cè)試,readFile()負(fù)責(zé)從指定文件中讀出內(nèi)容并輸出到方法定義時(shí)拋出異常。FileNotFoundException,IOException,誰調(diào)用誰處理,這里main()調(diào)用readFile()。4.2.3在方法體中用throw手工拋出異常3.throw拋出異常,可以是系統(tǒng)定義的異常,也可以是用戶自定義的異常。語法格式:thrownew<ExceptionClassName>([實(shí)參表])教學(xué)目標(biāo)4.1Exception的概念、子類及其繼承關(guān)系4.1.1

Exception的概念4.1.2

Exception的分類4.1.3

Exception的繼承關(guān)系和層次4.1.4方法調(diào)用堆棧4.2面向?qū)ο蟮漠惓L幚頇C(jī)制4.2.1

異常處理語句(try-catch-finally)4.2.2

在方法首部用throws拋出異常4.2.3在方法體中用throw手工拋出異常4.2.4程序示例4.3自定義異常4.3創(chuàng)建自定義異常Java語言允許用戶在需要時(shí)創(chuàng)建自己的異常類型,用于表述JDK中未包括的其他異常情況。這些類型必須繼承Thowable或其子類,一般繼承Exc

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論