假設(shè)在一個(gè)Java程序運(yùn)行期間出現(xiàn)了一個(gè)錯(cuò)誤。這個(gè)錯(cuò)誤可能是由于文件包含了錯(cuò)誤的信息,或者網(wǎng)絡(luò)連接出現(xiàn)問題造成的,也有可能是因?yàn)槭褂脽o效的數(shù)組下標(biāo),或者試圖使用一個(gè)沒有被賦值引用而造成的。用戶期望在出現(xiàn)錯(cuò)誤時(shí),程序能夠采用一些理智的行為,如果由于出現(xiàn)錯(cuò)誤而使得某些操作沒有完成,程序應(yīng)該:返回到一種安全狀態(tài),并能夠讓用戶執(zhí)行一些其他的命令;或者允許用戶保存所有操作的結(jié)果,并以適當(dāng)?shù)姆绞浇K止程序。
要做到這些并不是一件很容易的事情。其原因是檢測(cè)(或引發(fā))錯(cuò)誤條件的代碼通常離那些能夠讓數(shù)據(jù)恢復(fù)到安全狀態(tài),或者能夠保存用戶的操作結(jié)果,并正常地退出程序的代碼很遠(yuǎn)。異常處理的任務(wù)就是將控制權(quán)從錯(cuò)誤產(chǎn)生的地方轉(zhuǎn)移給能夠處理這種情況的錯(cuò)誤處理器。為了能夠在程序中處理異常情況,必須研究程序中可能會(huì)出現(xiàn)的錯(cuò)誤和問題,以及哪類問題需要關(guān)注。
1.用戶輸入錯(cuò)誤
除了那些不可避免的打字錄入外,有些用戶喜歡各行其是,不遵守程序的要求。例如,假設(shè)有一個(gè)用戶請(qǐng)求連接一個(gè)URL,而語法卻不正確。在程序代碼中應(yīng)該對(duì)此進(jìn)行檢查,如果沒有檢查,網(wǎng)絡(luò)數(shù)據(jù)包就會(huì)給出警告。
2.設(shè)備錯(cuò)誤
硬件并不總是讓它做什么,它就做什么。打印機(jī)可能被關(guān)掉了。網(wǎng)頁可能臨時(shí)性地不能瀏覽。在一個(gè)任務(wù)的處理過程中,硬件經(jīng)常出現(xiàn)問題。例如,打印機(jī)在打印過程中可能沒有紙了。
3.物理限制
磁盤滿了,可用存儲(chǔ)空間已被用完。
4.代碼錯(cuò)誤
程序方法有可能無法正確的執(zhí)行。例如,方法可能返回了一個(gè)錯(cuò)誤的答案,或者錯(cuò)誤地調(diào)用了其他方法。使用了一個(gè)無效的數(shù)組下標(biāo),試圖查找一個(gè)在散列表中不存在的數(shù)據(jù)項(xiàng)以及試圖對(duì)一個(gè)空棧進(jìn)行退棧操作。
對(duì)于方法中出現(xiàn)的錯(cuò)誤,傳統(tǒng)的處理方式是返回一個(gè)特定的錯(cuò)誤編碼,調(diào)用這個(gè)方法的方法對(duì)其進(jìn)行分析。例如,對(duì)于一個(gè)從文件中讀取信息的方法來說,如果返回值不是標(biāo)準(zhǔn)字符,而是一個(gè)-1,則表示文件結(jié)束。這種處理方式對(duì)于很多異常狀況都是可行的。還有一種表示錯(cuò)誤狀況的常用返回值是null引用。當(dāng)希望查詢的參數(shù)不存在時(shí),這個(gè)方法就會(huì)返回null。
遺憾的是,并不是在任何情況下都能夠返回一個(gè)錯(cuò)誤編碼。有可能無法明確地將有效數(shù)據(jù)與無效數(shù)據(jù)加以區(qū)分。一個(gè)返回整型的方法就不能簡單地通過返回-1表示錯(cuò)誤,因?yàn)?1很可能是一個(gè)完全合法的結(jié)果。
在Java中,如果某個(gè)方法不能夠采用正常的途徑完整它的任務(wù),就可以通過另外一個(gè)路徑退出方法。在這種情況下,方法并不返回任何值,而是拋出(throw)一個(gè)封裝了錯(cuò)誤信息的對(duì)象。需要注意的是,這個(gè)方法將會(huì)立刻退出,并不返回任何值。此外,調(diào)用這個(gè)方法的代碼也將無法繼續(xù)執(zhí)行,而是,異常處理機(jī)制開始搜索能夠處理這種異常狀況的異常處理器(exceptionhandler),異常具有自己的語法和特定的繼承結(jié)構(gòu)。
本文名稱:網(wǎng)站建設(shè)核心之處理異常
網(wǎng)址分享:http://m.newbst.com/news20/190570.html
網(wǎng)站建設(shè)、網(wǎng)絡(luò)推廣公司-創(chuàng)新互聯(lián),是專注品牌與效果的網(wǎng)站制作,網(wǎng)絡(luò)營銷seo公司;服務(wù)項(xiàng)目有網(wǎng)站建設(shè)等
廣告
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源:
創(chuàng)新互聯(lián)