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