面向?qū)ο驤ava應(yīng)用開發(fā)中的異常處理技術(shù)_第1頁
面向?qū)ο驤ava應(yīng)用開發(fā)中的異常處理技術(shù)_第2頁
面向?qū)ο驤ava應(yīng)用開發(fā)中的異常處理技術(shù)_第3頁
面向?qū)ο驤ava應(yīng)用開發(fā)中的異常處理技術(shù)_第4頁
面向?qū)ο驤ava應(yīng)用開發(fā)中的異常處理技術(shù)_第5頁
已閱讀5頁,還剩17頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、面向?qū)ο驤ava應(yīng)用開發(fā)中的異常處理技術(shù)異常(意外)處理技術(shù) 在本講將學(xué)習(xí)到如下的知識(shí)點(diǎn)Java中的異常技術(shù)Java中的異常處理實(shí)現(xiàn)機(jī)制Java中的異常編程規(guī)則try、catch、finally語句聲明和拋出異常 Java提供了一套強(qiáng)大的異常處理機(jī)制,可以幫助開發(fā)人員處理和預(yù)防程序中潛在的錯(cuò)誤。充分應(yīng)用Java異常處理的機(jī)制,可以使得程序更為健壯、運(yùn)行中更為安全。1、有關(guān)程序中的錯(cuò)誤處理方面的基礎(chǔ)知識(shí)(1)明確錯(cuò)誤處理的重要性 在進(jìn)行程序設(shè)計(jì)時(shí),錯(cuò)誤的產(chǎn)生是不可避免的這些錯(cuò)誤不僅會(huì)導(dǎo)致應(yīng)用程序異常中止而且可能引起系統(tǒng)的崩潰,這是任何程序設(shè)計(jì)語言都要解決的問題。(2)需要思考的問題如何處理錯(cuò)誤?

2、把錯(cuò)誤交給誰去處理?程序還能夠恢復(fù)(繼續(xù)執(zhí)行)嗎?如果能夠,哪又該如何從錯(cuò)誤中恢復(fù)?(3)需要深入地探尋Java異常處理技術(shù)的相關(guān)問題如何在一個(gè)多層的J2EE項(xiàng)目中定義異常類?在項(xiàng)目中的每一層如何進(jìn)行異常處理?異常何時(shí)被拋出?異常何時(shí)被記錄?異常該怎么記錄?何時(shí)需要把checked異常轉(zhuǎn)化成unchecked異常?同樣何時(shí)需要把unChecked異常轉(zhuǎn)化成checked異常?異常信息是否應(yīng)該呈現(xiàn)到前端界面?如何顯示?人“生病”并不可怕,只要能夠“康復(fù)”就行!Java提供異常處理技術(shù)2、有關(guān)Java異常處理方面的基礎(chǔ)知識(shí)(1)什么是異常程序在運(yùn)行過程中所發(fā)生的錯(cuò)誤事件(如數(shù)組越界、文件操作時(shí)未找

3、到文件、除法溢出等)而這些錯(cuò)誤在設(shè)計(jì)時(shí)不能準(zhǔn)確地識(shí)別出但又可能會(huì)發(fā)生或者不會(huì)發(fā)生但這些錯(cuò)誤是可被捕獲和處理的錯(cuò)誤。(2)正確地理解程序開發(fā)中所可能遇到的三種錯(cuò)誤語法錯(cuò)誤它是編譯時(shí)的錯(cuò)誤,一般可以由IDE工具及時(shí)提示和報(bào)告出具體的錯(cuò)誤)。邏輯錯(cuò)誤程序能夠正常編譯通過,但在運(yùn)行時(shí)出現(xiàn)錯(cuò)誤;一般需要利用IDE工具中提供的調(diào)試功能發(fā)現(xiàn)出。異常錯(cuò)誤它同樣也是程序在運(yùn)行時(shí)出現(xiàn)的錯(cuò)誤,但取決于執(zhí)行的環(huán)境,哪對(duì)這些錯(cuò)誤又是如何處理呢?3、異常的特點(diǎn)(以“人身保險(xiǎn)”為例加以說明異常的特性)(1)程序在運(yùn)行過程中所發(fā)生的錯(cuò)誤事件(2)程序員在編程時(shí)無法預(yù)知它是否會(huì)產(chǎn)生(3)產(chǎn)生與否取決于用戶當(dāng)時(shí)的執(zhí)行環(huán)境。生活中

4、的“有備無妨”的預(yù)先考慮的原則 Exception更準(zhǔn)確的中文翻譯應(yīng)該是“意外”4、Java中的異常處理技術(shù)(1)Java中的異常處理的技術(shù)特性將每類錯(cuò)誤轉(zhuǎn)化為某個(gè)Exception類的子類對(duì)象(OO封裝),同一類錯(cuò)誤在不同的代碼中出現(xiàn)時(shí),以相同的異常類型表示它是OO的錯(cuò)誤處理方法-將“異常”也就是“可捕獲和能夠處理的錯(cuò)誤”進(jìn)行抽象、封裝和層次化??梢赃_(dá)到“分門別類”地進(jìn)行錯(cuò)誤處理,使得錯(cuò)誤處理代碼更加清晰、簡(jiǎn)潔,錯(cuò)誤信息也更詳細(xì)和有價(jià)值。(2)常規(guī)的錯(cuò)誤處理技術(shù)所存在的缺點(diǎn)代碼很難閱讀、調(diào)試和維護(hù),并且容易忽視錯(cuò)誤通過函數(shù)的返回值發(fā)出錯(cuò)誤信息,無法提供錯(cuò)誤產(chǎn)生的內(nèi)部細(xì)節(jié)和詳細(xì)信息。可能因?yàn)楹?/p>

5、數(shù)是由不同的程序員編寫,當(dāng)同一類的錯(cuò)誤在不同的函數(shù)中返回時(shí),返回的錯(cuò)誤碼和實(shí)際的錯(cuò)誤信息并不一致易于導(dǎo)致錯(cuò)誤的“二義性” 。 (3)面向過程的錯(cuò)誤處理和面向?qū)ο蟮腻e(cuò)誤處理對(duì)比示例Exception就相當(dāng)于一個(gè)錯(cuò)誤類型,如果要定義一個(gè)新的錯(cuò)誤類型只需要從Exception類擴(kuò)展?!罢9δ堋贝a與“錯(cuò)誤處理”代碼相互分離。 5、說明應(yīng)用異常處理技術(shù)優(yōu)點(diǎn)的示例在實(shí)現(xiàn)某個(gè)數(shù)據(jù)校驗(yàn)方法時(shí),比如對(duì)用戶名的校驗(yàn),只需返回一個(gè)boolean值以反映用戶輸入的數(shù)據(jù)是否有誤。而如果是身份證號(hào)碼這類數(shù)據(jù)出錯(cuò)了,可能就需要提供更“細(xì)粒度”的錯(cuò)誤信息給用戶,告訴用戶是與“出生日期”不符還是“數(shù)據(jù)位數(shù)”不夠等更詳細(xì)的說

6、明信息。對(duì)這種錯(cuò)誤種類較多的應(yīng)用情況,其一可以返回錯(cuò)誤代號(hào)(如 int 值)來區(qū)別各種錯(cuò)誤-這是非面向?qū)ο笳Z言的一種做法。而在面向?qū)ο笳Z言中,可以聲明一個(gè)自定義的異常類 UserInfoException 來包裝錯(cuò)誤類型和各種可能的錯(cuò)誤信息,這比返回錯(cuò)誤代號(hào)更詳細(xì)和更好理解。 因?yàn)殄e(cuò)誤代號(hào)需要解析成具體的錯(cuò)誤信息,這個(gè)解析工作還得由校驗(yàn)器類的API“客戶類”來解釋-其它的業(yè)務(wù)邏輯類,從而導(dǎo)致業(yè)務(wù)邏輯類還是耦合了數(shù)據(jù)校驗(yàn)錯(cuò)誤處理邏輯。6、異常處理的優(yōu)點(diǎn)總結(jié)(OOP方式的錯(cuò)誤處理編程)(1)能將“錯(cuò)誤處理” 與“常規(guī)功能”代碼相分離,程序更加健壯、簡(jiǎn)潔;(2)能將錯(cuò)誤沿調(diào)用棧向上傳播并有助于解決潛

7、在的問題、做到預(yù)防性設(shè)計(jì)。(3)能按錯(cuò)誤類型分門別類地處理對(duì)代碼中的可能錯(cuò)誤類型可以同時(shí)捕獲,并允許采用類似于Switch Case 語句的分類方式過濾異常錯(cuò)誤。(4)錯(cuò)誤類型的可擴(kuò)展性好 如果要定義一個(gè)新的錯(cuò)誤類型只需要從Exception類擴(kuò)展。7、Java中的異常處理實(shí)現(xiàn)機(jī)制(1)異常處理機(jī)制主要體現(xiàn)在“拋出異?!辈ⅰ安东@異?!边@兩個(gè)層次。(2)拋出異常當(dāng)程序執(zhí)行過程中產(chǎn)生異常時(shí),將生成一個(gè)異常類對(duì)象(它代表某一異常類型的錯(cuò)誤事件)該異常對(duì)象將被提交給Java運(yùn)行時(shí)系統(tǒng),這個(gè)過程稱為拋出(throw)異常。(3)捕獲異常 當(dāng)Java運(yùn)行時(shí)系統(tǒng)接收到異常對(duì)象時(shí),會(huì)尋找能處理這一異常的程序代

8、碼并把當(dāng)前異常對(duì)象交給其處理,這一過程稱為捕獲(catch)異常。8、如何捕獲異常采用try、catch、 finally語句塊。實(shí)現(xiàn)“錯(cuò)誤的產(chǎn)生”與“錯(cuò)誤的處理”分離!9、try、catch、finally語句塊的用法(1)try語句塊它指定可能會(huì)產(chǎn)生異常的語句范圍,也即為catch規(guī)定異常捕獲的語句范圍。注意:異常被捕獲和處理時(shí)程序執(zhí)行流程見下面的圖示(2)catch語句塊它指明需要捕獲異常事件的類型并相應(yīng)地給出處理的方法(代碼)。(3)finally它指定一代碼塊,不管是否有異常產(chǎn)生或是否捕獲住該異常,程序都從此處繼續(xù)向后執(zhí)行。從而達(dá)到提供統(tǒng)一的出口(如關(guān)閉文件、清除系統(tǒng)資源等功能)。1

9、0、異常處理的形式(1)try-catch 實(shí)例一finally為可選形式,只在這些應(yīng)用場(chǎng)合中需要它!catch(IOException e) catch(FileNotFoundException e) /永遠(yuǎn)不會(huì)被執(zhí)行(2)多catch(try-catch-catch)應(yīng)用示例(3)try/catch/finally應(yīng)用示例11、程序中對(duì)異常處理的方法 當(dāng)編程使用某一個(gè)帶有異常定義的方法時(shí),程序員可以有如下兩種處理異常的方法。(1)方法一 通過try、catch、finally語句塊,捕獲住該異常。(2)方法二不捕獲和處理該異常但必須繼續(xù)上傳(遞交給上一級(jí)的調(diào)用者來處理),這可通過thro

10、ws語句來聲明所拋出的異常。 12、聲明和拋出異常(1)什么場(chǎng)合下應(yīng)該要進(jìn)行異常聲明應(yīng)該在下面的場(chǎng)合中給出異常聲明在可能會(huì)出現(xiàn)異常的方法聲明中不捕獲和處理異常的函數(shù)聲明中(繼續(xù)上傳異常)(2)異常定義的語法格式 在函數(shù)聲明的后面采用“throws 異常類型名列表”來定義異常。如下示例:返回類型 函數(shù)名(形參定義) throws 異常類型名 函數(shù)體定義;(3)異常的拋出系統(tǒng)自動(dòng)拋出的異常 程序中出現(xiàn)系統(tǒng)中定義的異常時(shí),可以由系統(tǒng)自動(dòng)來拋出它。對(duì)于在方法定義時(shí)采用throws所聲明的某個(gè)異常類型時(shí),在其方法體中必須使用“throw 異常事件(對(duì)象名)” 來拋出該種類型的異常事件(即程序員自己拋出程序中定義的自己的異常事件),以便上一級(jí)的調(diào)用者程序來捕獲并處理它。屬于unChecked異常,可以不用捕獲它屬于Checked異常,必須捕獲它13、JDK系統(tǒng)中異常類的層次結(jié)構(gòu)(1)了解JDK中預(yù)定義的異常API的繼承關(guān)系(2)明確Checked和UnChecked類型的異常不同的處理要求當(dāng)一個(gè)方法去調(diào)用一個(gè)可能拋出checked異常的方法,必須通過trycatch

溫馨提示

  • 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)論