亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? exception.txt

?? 高效的Java異常處理 Java開發(fā)人員可以做出的最重要的架構(gòu)性決策之一就是如何使用Java異常模型。
?? TXT
?? 第 1 頁 / 共 2 頁
字號(hào):
- 高效的Java異常處理
 
Java開發(fā)人員可以做出的最重要的架構(gòu)性決策之一就是如何使用Java異常模型。Java異常一直以來就是社群中許多爭(zhēng)議的靶子。有人爭(zhēng)論到,在Java語言中的異常檢查已是一場(chǎng)失敗的試驗(yàn)。本文將辨析,失敗的原因不在于Java異常模型,而在于Java類庫的設(shè)計(jì)者未能充分了解到方法失敗的兩個(gè)基本原因。

本文倡導(dǎo)一種對(duì)異常條件本質(zhì)的思考方式,并描述一些有助于設(shè)計(jì)的模式。最后,本文還將在AOP模型中,作為相互滲透的問題,來討論異常的處理。當(dāng)你能正確使用異常時(shí),它們會(huì)有極大的好處。本文將幫助你做到這一點(diǎn)。


為何異常是如此重要

Java應(yīng)用中的異常處理在很大程度上揭示了其所基于架構(gòu)的強(qiáng)度。架構(gòu)是在應(yīng)用程序各個(gè)層次上所做出并遵循的決定。其中最重要的一個(gè)就是決定應(yīng)用程序中的類,亞系統(tǒng),或?qū)又g溝通的方式。Java異常是Java方法將另類執(zhí)行結(jié)果交流出去的方式,所以值得在應(yīng)用架構(gòu)中給予特殊關(guān)注。

一個(gè)衡量Java設(shè)計(jì)師水平和開發(fā)團(tuán)隊(duì)紀(jì)律性的好方法就是讀讀他們應(yīng)用程序里的異常處理代碼。首先要注意的是有多少代碼用于捕獲異常,寫進(jìn)日志文件,決定發(fā)生了什么,和在不同的異常間跳轉(zhuǎn)。干凈,簡(jiǎn)捷,關(guān)聯(lián)性強(qiáng)的異常處理通常表明開發(fā)團(tuán)隊(duì)有著穩(wěn)定的使用Java異常的方式。當(dāng)異常處理代碼的數(shù)量甚至要超過其他代碼時(shí),你可以看出團(tuán)隊(duì)之間的交流合作有很大的問題(可能在一開始就不存在),每個(gè)人都在用他們自己的方式來處理異常。

對(duì)突發(fā)異常的處理結(jié)果是可以預(yù)見的。如果你問問團(tuán)隊(duì)成員為什么異常會(huì)被拋出,捕獲,或在特定的一處代碼里忽視了異常的發(fā)生,他們的回答通常是,“我沒有別的可做”。如果你問當(dāng)他們編寫的異常真的發(fā)生了會(huì)怎么樣,他們會(huì)皺皺眉,你得到的回答類似于這樣,“我不知道。我們從沒測(cè)試過。”

你可以從客戶端的代碼判斷一個(gè)java的組件是否有效利用了java的異常。如果它們包含著大堆的邏輯去弄清楚在何時(shí)一筆操作失敗了,為何失敗,是否有彌補(bǔ)的余地,那么原因很有可能要?dú)w咎于組件的報(bào)錯(cuò)設(shè)計(jì)。錯(cuò)誤的報(bào)錯(cuò)系統(tǒng)會(huì)在客戶端產(chǎn)生大量的“記錄然后忘掉”的代碼,這些代碼鮮有用途。最差的是弄擰的邏輯,嵌套的try/catch/finally代碼塊,和一些其他的混亂而導(dǎo)致脆弱而難于管理的應(yīng)用程序。

事后再來解決Java異常的問題,或根本就不解決,是軟件項(xiàng)目產(chǎn)生混亂并導(dǎo)致滯后的主要原因。異常處理是一個(gè)在設(shè)計(jì)的各個(gè)部分都急需解決的問題。對(duì)異常處理建立一個(gè)架構(gòu)性的約定是項(xiàng)目中首要做出的決定。合理使用Java異常模型對(duì)確保你的應(yīng)用簡(jiǎn)單,易維護(hù),和正確有著長遠(yuǎn)的影響。



解析異常

正確使用Java異常模型所包含的內(nèi)容一直以來有著很大的爭(zhēng)議。Java不是第一種支持異常算法語義的;但是,它卻是第一種通過編譯器來執(zhí)行聲明和處理某些異常的規(guī)則的語言。許多人都認(rèn)為編譯時(shí)的異常檢查對(duì)精確的軟件設(shè)計(jì)頗有幫助。圖1顯示的Java異常的等級(jí)。



圖1:Java異常的等級(jí)


通常,Java編譯器強(qiáng)迫拋出基于java.lang.Throwable的異常的方法要在它聲明中的“throws”部分加上那個(gè)異常。而且,編譯器還會(huì)證實(shí)客戶端的方法或者捕獲已聲明的異常,或者特別聲明自己也拋出同樣的異常。這些簡(jiǎn)單的規(guī)則對(duì)世界范圍的Java程序員都有深遠(yuǎn)的影響。

編譯器放松了對(duì)Throwable繼承樹中兩個(gè)分支的異常檢查。java.long.Error和java.lang.RuntimeException的子類免于編譯時(shí)的檢查。在這兩類中,軟件工程師通常對(duì)運(yùn)行中異常更感興趣。“不檢查”的異常指的是這一組,以便和所有其它“檢查”的異常區(qū)別開。

我可以想象那些接受“檢查”的異常的人,也會(huì)很看重Java的數(shù)據(jù)類型。畢竟,編譯器對(duì)數(shù)據(jù)類型施加的限制鼓勵(lì)嚴(yán)格的編碼和精確的思維。編譯時(shí)的類型檢查對(duì)減少運(yùn)行時(shí)的嚴(yán)重問題有幫助。編譯時(shí)的異常檢查也能起到類似的作用,它會(huì)提醒開發(fā)人員某個(gè)方法可能會(huì)有預(yù)想不到的結(jié)果需要處理好。

早期的建議是盡可能的使用“檢察的異常”,以此來最大限度的利用編譯器提供的幫助來寫出無錯(cuò)誤的軟件。Java類庫API的設(shè)計(jì)者們都認(rèn)同這一點(diǎn),他們廣泛地使用“檢察的異常”來模擬類庫方法中幾乎所有的緊急應(yīng)變措施。在J2SE5.1 API規(guī)格中,“檢察的異常”類型已2比1的比率超過了“未檢查的異常”類型。

對(duì)程序員而言,看上去在Java類庫中大多數(shù)的常用方法對(duì)每一個(gè)可能的失敗都聲明了“檢察的異常”。例如,java.io包
對(duì)IOException這個(gè)“檢察的異常”就有著很大的依賴。至少有63個(gè)Java類庫包,或直接,或通過十幾個(gè)下面的子類,拋出這個(gè)異常。

I/O的失敗極其稀有,但是卻很嚴(yán)重。而且,一旦發(fā)生,從你所寫的代碼里基本上是無法補(bǔ)救的。Java程序員意識(shí)到他們不得不提供IOException或類似的不可補(bǔ)救的事件,而一個(gè)簡(jiǎn)單的Java類庫方法的調(diào)用就可能讓這些事件發(fā)生。捕獲這些異常給本來簡(jiǎn)單的代碼帶來了一定的晦澀,因?yàn)榧词乖诓东@的代碼塊里也基本上幫不上忙。但是不加以捕獲又可能更糟糕,因?yàn)榫幾g器要求你的方法必須要拋出那些異常。這樣你的實(shí)施細(xì)則就不得不暴露在外了,而通常好的面向?qū)ο蟮脑O(shè)計(jì)都是要隱藏細(xì)節(jié)的。

這樣一個(gè)不可能贏的局面導(dǎo)致了我們今天所警告的絕大多數(shù)臭名卓著的異常處理的顛覆性格局。同時(shí)也衍生了很多正確或錯(cuò)誤的補(bǔ)救之道。

一些Java界的知名人物開始質(zhì)疑Java的“檢察的異常”的模型是否是一個(gè)失敗的試驗(yàn)。有一些東西肯定是失敗的,但是這和在Java語言里加入對(duì)異常的檢查是毫無關(guān)聯(lián)的。失敗是由于在Java API的設(shè)計(jì)者們的思維里,大多數(shù)失敗的情形是雷同的,所以可以通過同一種異常傳達(dá)出去。



故障和應(yīng)變

讓我們來考慮在一個(gè)假想的銀行應(yīng)用中的CheckingAccount類。一個(gè)CheckingAcccount屬于一個(gè)用戶,記載著用戶的存款余額,也能接受存款,接受止兌的通知,和處理匯入的支票。一個(gè)CheckingAcccount對(duì)象必須協(xié)調(diào)同步線程的訪問,因?yàn)槿魏我粋€(gè)線程都可能改變它的狀態(tài)。CheckingAcccount類里processCheck的方法會(huì)接受一個(gè)Check對(duì)象為參數(shù),通常從帳戶余額里減去支票的金額。但是一個(gè)管理支票清算的用戶端程序調(diào)用processCheck方法時(shí),必須有兩種可能的應(yīng)變措施。一,CheckingAccount對(duì)象里可能對(duì)該支票已有一個(gè)止付的命令;二,帳戶的余額可能不足已滿足支票的金額。

所以,processCheck的方法對(duì)來自客戶端的調(diào)用可以有3種方式回應(yīng)。正常的是處理好支票,并把方法簽名里聲明的結(jié)果返回給調(diào)用方。兩種應(yīng)變的回應(yīng)則是需要與支票清算端溝通的在銀行領(lǐng)域?qū)崒?shí)在在存在的情況。processCheck方法所有3種返回結(jié)果都是按照典型的銀行支票帳戶的行為而精心設(shè)計(jì)的。

在Java里,一個(gè)自然的方法來表示上述緊急的應(yīng)變是定義兩種異常,比如StopPaymentException(止付異常)和InsufficientFundsException(余額不足異常)。一個(gè)客戶端如果忽略這些異常是不對(duì)的,因?yàn)檫@些異常在正常操作的情況下一定會(huì)被拋出。他們?nèi)缤椒ǖ暮灻粯臃从沉朔椒ǖ娜嫘袨椤?
客戶端可以很容易的處理好這兩種異常。如果對(duì)支票的兌付被停止了,客戶端把該支票交付特別處理。如果是因?yàn)橘Y金不足,用戶端可以從用戶的儲(chǔ)蓄帳戶里轉(zhuǎn)移一些資金到支票帳戶里,然后再試一次。

在使用CheckingAccount的API時(shí),這些應(yīng)變都是可以預(yù)計(jì)的和自然的結(jié)果。他們并不是意味著軟件或運(yùn)行環(huán)境的失敗。這些異常和由于CheckingAccount類中一些內(nèi)部實(shí)施細(xì)則引起的真正失敗是不同的。

設(shè)想CheckingAccount對(duì)象在數(shù)據(jù)庫里保持著一個(gè)恒定的狀態(tài),并使用JDBC API來對(duì)之訪問。在那個(gè)API里,幾乎所有的數(shù)據(jù)庫訪問方法都有可能因?yàn)楹虲heckingAccount實(shí)施無關(guān)的原因而失敗。比如,有人可能忘了把數(shù)據(jù)庫服務(wù)器運(yùn)行起來,一個(gè)未有連上的網(wǎng)絡(luò)數(shù)據(jù)線,訪問數(shù)據(jù)庫的密碼改變了,等等。

JDBC依靠一種“檢查的異常”,SQLException,來匯報(bào)任何可能的錯(cuò)誤。可能出錯(cuò)的絕大多數(shù)原由都是數(shù)據(jù)庫的配置,連接,或其所在的硬件設(shè)施。對(duì)processCheck方法而言,它對(duì)上述錯(cuò)誤是無計(jì)可施的。這不應(yīng)該,因?yàn)閜rocessCheck至少了解它自己的實(shí)施細(xì)則。在調(diào)用棧里上游的方法能處理這些問題的可能就更小。

CheckingAccount這個(gè)例子說明了一個(gè)方法不能成功返回它想要的結(jié)果的兩個(gè)基本原因。這里是兩個(gè)描述性的術(shù)語:

應(yīng)變
與實(shí)際預(yù)料相符,一個(gè)方法給出另外一種回應(yīng),而這種回應(yīng)可以表達(dá)成該方法所要達(dá)到的目的之一。這個(gè)方法的調(diào)用者預(yù)料到這個(gè)情況的出現(xiàn),并有相對(duì)的應(yīng)付之道。

故障
在未經(jīng)計(jì)劃的情況下,一個(gè)方法不能達(dá)到它的初衷,這是一個(gè)不訴諸該方法的實(shí)施細(xì)則就很難搞清的情況。

應(yīng)用這些術(shù)語,對(duì)processCheck方法而言,一個(gè)止付的命令和一個(gè)超額的提取是兩種可能的應(yīng)變。而SQLException反映了可能的故障。processCheck方法的調(diào)用者應(yīng)該能夠提供應(yīng)變,但卻不一定能有效的處理好可能發(fā)生的故障。


Java異常的匹配

在建立應(yīng)用架構(gòu)中Java異常的規(guī)則時(shí),以應(yīng)變和故障的方式仔細(xì)考慮好“什么可能會(huì)出錯(cuò)”是有長遠(yuǎn)意義的。

條件
 應(yīng)變
 故障
 
被考慮成
 設(shè)計(jì)的一部分
 一個(gè)糟糕的意外
 
預(yù)計(jì)到會(huì)發(fā)生
 經(jīng)常發(fā)生
 絕不發(fā)生 
關(guān)注方
 上游對(duì)該方法的調(diào)用者
 需要修好這個(gè)問題的人
 
舉例 另一種返回方式
 程序bug,硬件系統(tǒng)故障,配置錯(cuò)誤,丟失的文件,服務(wù)器沒有運(yùn)行 
最好的匹配
 一個(gè)檢查的異常

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91网站在线播放| 中文字幕成人在线观看| 亚洲激情校园春色| 国产传媒一区在线| 26uuu国产在线精品一区二区| 亚洲欧美日韩国产一区二区三区| 日韩**一区毛片| 91福利在线看| 亚洲精品视频在线| 97se亚洲国产综合自在线观| 久久无码av三级| 国产99精品在线观看| 日韩久久免费av| 六月丁香婷婷久久| 久久蜜桃av一区二区天堂| 激情欧美一区二区三区在线观看| 欧美另类一区二区三区| 婷婷国产v国产偷v亚洲高清| 91精品国模一区二区三区| 亚洲一二三四在线观看| 色成年激情久久综合| 亚洲人一二三区| 91女厕偷拍女厕偷拍高清| 精品国产成人系列| 国产99精品国产| 亚洲免费av高清| 日韩免费在线观看| k8久久久一区二区三区 | 欧美性猛交xxxx乱大交退制版| 亚洲网友自拍偷拍| 久久这里都是精品| 91亚洲精品乱码久久久久久蜜桃| 欧美韩日一区二区三区| 在线视频一区二区免费| 亚洲成av人片在线| 久久久国产精品麻豆| 欧美三区在线视频| 国产成+人+日韩+欧美+亚洲| 亚洲影视在线播放| 国产欧美精品一区二区色综合朱莉| 99精品久久99久久久久| 精品在线观看视频| 亚洲精品免费在线| www久久久久| 7777精品伊人久久久大香线蕉最新版| 国产精品99久久久| 一区二区三区四区国产精品| 2024国产精品视频| 欧美精品黑人性xxxx| av电影天堂一区二区在线| 精品中文av资源站在线观看| 亚洲一本大道在线| 最新热久久免费视频| 久久九九99视频| 亚洲精品一区二区三区福利| 91精品国产aⅴ一区二区| 欧美日韩在线播放三区| 91国偷自产一区二区三区观看| 国产成人午夜视频| 岛国一区二区在线观看| 成人黄页在线观看| 91蜜桃免费观看视频| 色综合久久久久综合体桃花网| 成人深夜在线观看| 91老司机福利 在线| 成人av小说网| 欧美日韩aaa| 久久久久久亚洲综合| 亚洲精品乱码久久久久久黑人| 视频一区视频二区在线观看| 国模娜娜一区二区三区| 在线观看日韩电影| 久久久精品免费免费| 亚洲尤物视频在线| 国产乱码精品一区二区三区五月婷| 99re6这里只有精品视频在线观看| 欧美色图片你懂的| 国产精品欧美一级免费| 视频在线观看91| 久久先锋影音av鲁色资源| 成人免费在线视频| 国产精品女主播av| 蜜乳av一区二区| 欧美日韩mp4| 亚洲精品国产品国语在线app| 精品亚洲aⅴ乱码一区二区三区| 色综合色狠狠天天综合色| 久久综合久久99| 精品一二三四区| 91精品国产欧美一区二区成人| 一区在线播放视频| 成人激情黄色小说| 国产情人综合久久777777| 裸体一区二区三区| 欧美一级国产精品| 蜜臀av性久久久久蜜臀aⅴ流畅 | 黄网站免费久久| 欧美一卡2卡3卡4卡| 日本vs亚洲vs韩国一区三区| 欧美视频在线观看一区二区| 亚洲一区二区精品视频| 欧洲一区在线电影| 亚洲成人精品在线观看| 欧美老肥妇做.爰bbww视频| 日韩国产精品91| 欧美va亚洲va在线观看蝴蝶网| 卡一卡二国产精品 | 99精品视频在线观看| 亚洲精品国久久99热| 欧美日韩在线三级| 激情欧美一区二区三区在线观看| 久久精品这里都是精品| 成人免费观看av| 亚洲综合小说图片| 欧美一区二区三区在线看| 国模少妇一区二区三区| 亚洲欧美激情小说另类| 日韩一级片在线播放| 成人午夜碰碰视频| 日本中文一区二区三区| 国产精品午夜免费| 欧美美女一区二区在线观看| 国产精品一级片| 亚洲成人资源在线| 久久久久久久av麻豆果冻| 欧美视频一区在线观看| 国产suv精品一区二区三区| 一区二区三区在线视频免费| 精品久久人人做人人爱| 日本国产一区二区| 精品一区中文字幕| 日产国产欧美视频一区精品| 中文字幕在线不卡一区二区三区| 欧美一级在线视频| 欧美怡红院视频| 91亚洲精品乱码久久久久久蜜桃| 国产一区在线精品| 日本欧美大码aⅴ在线播放| 亚洲视频电影在线| 国产精品灌醉下药二区| 欧美激情中文字幕一区二区| 精品黑人一区二区三区久久 | 在线视频一区二区免费| 不卡视频在线看| eeuss影院一区二区三区| 国产69精品一区二区亚洲孕妇| 蜜桃久久精品一区二区| 麻豆91在线播放| 久久www免费人成看片高清| 日韩在线播放一区二区| 亚洲高清久久久| 亚洲国产精品久久人人爱| 亚洲电影在线播放| 免费成人小视频| 国内精品久久久久影院薰衣草| 国产精品1区二区.| 大胆欧美人体老妇| 欧美日免费三级在线| 日韩一区二区中文字幕| 久久久www成人免费无遮挡大片| 欧美经典一区二区| 一个色妞综合视频在线观看| 午夜精品aaa| 国产传媒日韩欧美成人| 色综合久久久久综合体| 欧美日韩精品福利| 久久久久久久精| 亚洲第一福利一区| 国产美女娇喘av呻吟久久| 91浏览器打开| 精品国产露脸精彩对白| 亚洲综合色自拍一区| 亚洲成精国产精品女| 国产盗摄精品一区二区三区在线| 欧美在线观看视频在线| 久久免费的精品国产v∧| 亚洲一本大道在线| 国产成人福利片| 精品国产区一区| 午夜精品福利在线| 99视频精品在线| 日本一区二区成人| 久久99国产精品久久99果冻传媒| 在线免费观看成人短视频| 中文字幕乱码亚洲精品一区 | 综合婷婷亚洲小说| 粉嫩绯色av一区二区在线观看| 欧美日韩中文精品| 亚洲精品久久嫩草网站秘色| 国产高清在线精品| 日韩精品最新网址| 另类综合日韩欧美亚洲| 欧美高清dvd| 免费欧美在线视频| 日韩三级高清在线| 韩国毛片一区二区三区| 日韩欧美一区二区在线视频| 男女性色大片免费观看一区二区 | 精品入口麻豆88视频| 蜜桃视频第一区免费观看|