亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

java的異常處理機制

2019-11-18 11:10:39
字體:
來源:轉載
供稿:網友

  關于 java 中引入的 Checked Exceptions,目前存在著很多反對意見。正方的觀點是引入 Checked Exceptions,可以增加程度的魯棒性。反方的觀點是 Checked Exceptions 很少被開發人員正確使用過,并且降低了程序開發的生產率和代碼的執行效率。

正方代表 James Gosling

http://www.artima.com/intv/solid.Html

反方代表 Anders Hejlsberg

http://www.artima.com/intv/csdes.html

中文版:http://www.csdn.net/develop/article/22/22612.shtm

我的一些觀點:

第一部分 選擇checked or unchecked

這里需要對異常的理解。什么算異常?java的異常處理機制是用來干什么的?異常和錯誤有什么區別?

異常機制就是java的錯誤處理機制!java中的異常意味著2點:第一,讓錯誤處理代碼更有條理。這使得

正常代碼和錯誤處理代碼分離。第二,引入了context的概念,認為有些錯誤是可以被處理的。問題就出在這兒了。

java的checked異常指的就是在當前context不能被處理的錯誤!

這句話其實是對上面2點的總結。首先checked異常是一種錯誤,其次這種錯誤可以被處理(或修復)。

checked異常就是可以被處理(修復)的錯誤,unchecked異常其實就是無法處理(修復)的錯誤。

說到這兒,應該清楚了。別的語言沒有checked異常,就是說它們認為錯誤都無法被修復,至少在語言級

不提供錯誤修復的支持。java的catch clause干的就是錯誤修復的事。

我的理解是,用好java的異常,其實就是搞清楚什么時候該用checked異常。應該把unchecked異常當作

缺省行為。unchecked異常的意思是:當我做這件事時,不可思議的情況發生了,我沒辦法正常工作下去!

然后拋出一個unchecked異常,程序掛起。而checked異常的意思是:當我做這件事時,有意外情況發生,

可以肯定的是,活是沒法干了,但是要不要掛起程序,我這個函數沒法做主,我只能匯報上級!

其實,從上面的分析可以看出,java引入checked異常只是讓程序員多了一個選擇,它并不強迫你使用checked異常。

假如你對什么時候應該使用checked異常感到迷惑,那么最簡單的辦法就是,不要使用checked異常!這里包括2個

方面:

第一,你自己不必創建新的異常類,也不必在你的代碼中拋出checked異常,錯誤發生后只管拋出unchecked異常;

第二,對已有API的checked異常統統catch后轉為unchecked異常!

使用unchecked異常是最省事的辦法。用這種方法也可以享受“正常代碼和錯誤處理代碼分離”的好處。因為我們在調用方法時,

不用根據其返回值判定是否有錯誤出現,只管調用,只管做正事就ok了。假如出現錯誤,程序自然會知道并掛起。這樣的效果是怎樣

的呢?

第一,我們的業務代碼很清楚,基本都是在處理業務問題,而沒有一大堆判定是否有錯的冗余代碼。(想想看,假如沒有

throw異常的機制,你只能通過函數的返回值來判定錯誤,那么你在每個調用函數的地方都會有判定代碼!)

第二,我們的代碼假設一切正常,假如確實如此,那么它工作良好。但是一旦出現任何錯誤,程序就會掛起停止運行。當然,你可以查看

日志找到錯誤信息。

那么使用checked異常又是怎樣的呢?

第一,你需要考慮更多的問題。首先在設計上就會更加復雜,其次就是代碼更加冗長。設計上復雜

體現在以下方面:

1 對異常(錯誤)的抽象和理解。你得知道什么情況才能算checked異常,使得上級確實能夠處理(修復)這種異常,并且讓整個程序

從這種設計中確實得到好處。

2 對整個自定義checked異常繼續體系的設計。正如那篇文章所說,總不能在一個方法后面拋出20個異常吧!設計自定義checked異常,

就要考慮方法簽名問題,在合適的時候拋出合適的異常(不能一味的拋出最具體的異常,也不能一味拋出最抽象的異常)

第二,業務代碼相比較使用unchecked的情況而言,不夠直接了當了。引入了throws簽名和catch clause,代碼里有很多catch,方法

簽名也和異常綁定了。

第三,有了更強的錯誤處理能力。假如發生了checked異常,我們有能力處理(修復)它。表現在不是任何錯誤都會導致程序掛起,出現了

checked異常,程序可能照樣運行。整個程序更加健壯,而代價就是前面2條。

第二部分 使用checked異常的最佳實踐

現在假設有些錯誤我們確定為checked異常,那么我們針對這些checked異常要怎樣編碼才合理呢?

1 不要用checked異常做流程控制。無論如何,checked異常也是一種錯誤。只是我們可以處理(修復)它而已。這種錯誤和普通業務

流程還是有區別的,而且從效率上來說,用異??刂茦I務流程是不劃算的。其實這個問題有時候很難界定,因為checked異?!翱梢孕迯汀?,

那么就是說修復后程序照常運行,這樣一來真的輕易跟普通業務流程混淆不清。比如注冊用戶時用戶名已經存在的問題。這個時候我們要考慮,

為什么要用checked異常?這和使用業務流程相比,給我帶來了什么好處?(注重checked異??梢孕迯?,這是和unchecked異常本質的區別)

照我的理解,checked異常應該是介于正常業務流程和unchecked異常(嚴重錯誤)之間的一種比較嚴重的錯誤。出現了這種錯誤,程序無法

完成正常的功能是肯定的了,但我們可以通過其他方式彌補(甚至修復),總之不會讓程序掛起就是。其實這一點也是設計checked異常時要考慮

的問題,也是代價之一吧。

2 對checked異常的封裝。這里面包括2個問題:

第一,假如要創建新的checked異常,盡量包含多一點信息,假如只是一條message,那么用Exception好了。當然,用Exception會

失去異常的型別信息,讓客戶端無法判定具體型別,從而無法針對特定異常進行處理。

第二,不要讓你要拋出的checked exception升級到較高的層次。例如,不要讓SQLException延伸到業務層。這樣可以避免方法

簽名后有太多的throws。在業務層將持久層的所有異常統統歸為業務層自定義的一種異常。

3 客戶端調用含有throws的方法要注重:

第一,不要忽略異常。既然是checked異常,catch clause里理應做些有用的事情——修復它!catch里為空白或者僅僅打印出錯信息都是

不妥的!為空白就是假裝不知道甚至瞞天過海,但是,出來混遲早要還的,遲早會報unchecked異常并程序掛起!非典就是個例子。

打印出錯信息也好不到哪里去,和空白相比除了多幾行信息沒啥區別。假如checked異常都被這么用,那真的不如當初都改成unchecked好了,

大家都省事!

第二,不要捕捉頂層的Exception。你這么干,就是在犯罪!因為unchecked異常也是一種Exception!你把所有異常都捕捉了——不是我

不相信你的能力,你根本就不知道該如何處理!這樣做的直接的后果就是,你的程序一般來說是不會掛起了,但是出現錯誤的時候功能廢了,

表面上卻看不出什么!當然,深究起來,這也不是什么罪大惡極,假如你在catch里打印了信息,這和上面那條的情況是差不多的。而這2條

的共同點就是,沒有正確使用checked異常!費了那么大勁設計的checked異常就是給你們上級(客戶端)用的,結果你們不會用!真的

不如用unchecked干脆利落了!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩av中文在线| 亚洲国产精品人久久电影| 亚洲最大激情中文字幕| 伊人久久久久久久久久| 最近2019年中文视频免费在线观看| 国产精品爽爽爽爽爽爽在线观看| 亚洲欧美国产一区二区三区| 欧美性猛交视频| 欧美午夜精品伦理| 伊人久久精品视频| 亚洲一区二区三区777| 91深夜福利视频| 国产视频精品在线| 欧美自拍大量在线观看| 日韩极品精品视频免费观看| 亚洲精品大尺度| 久久久精品中文字幕| 亚洲伊人第一页| 国产福利精品在线| 欧美黑人一区二区三区| 久久免费精品视频| 欧美国产日韩一区二区在线观看| 国产精品精品视频| 国产精品人人做人人爽| 78m国产成人精品视频| 国产91精品久久久| 亚洲mm色国产网站| 日韩精品极品毛片系列视频| 国产精品美乳在线观看| 成人伊人精品色xxxx视频| 色综合老司机第九色激情| 国产精品丝袜视频| 久久频这里精品99香蕉| 欧美性猛交xxxx富婆| 精品无人区乱码1区2区3区在线| 麻豆国产精品va在线观看不卡| 中文字幕亚洲欧美日韩高清| 亚洲大胆人体视频| 97国产精品视频人人做人人爱| 91精品国产自产在线老师啪| 日韩美女中文字幕| 久久久久久999| 韩剧1988在线观看免费完整版| 91九色综合久久| 九九精品在线观看| 九色精品免费永久在线| 4438全国亚洲精品在线观看视频| 国产91热爆ts人妖在线| 亚洲色图18p| 国产欧美一区二区三区久久| 成人动漫网站在线观看| 日韩激情视频在线播放| 97人人爽人人喊人人模波多| 亚洲精品日韩在线| 国产欧美日韩中文| 亚洲欧美中文日韩在线v日本| 中文字幕日韩精品在线| 国产日韩精品在线| 中文字幕一区二区三区电影| 亚洲精品日韩在线| 色偷偷av亚洲男人的天堂| 亚洲xxxx18| 91高清视频免费| 国产亚洲视频在线| 亚洲日本aⅴ片在线观看香蕉| 国产精品影院在线观看| 亚洲欧美日韩爽爽影院| 欧美黑人性猛交| 欧美国产精品人人做人人爱| 日韩欧美亚洲范冰冰与中字| 亚洲欧美日韩一区二区三区在线| 欧洲午夜精品久久久| 亚洲最大激情中文字幕| 都市激情亚洲色图| 国产精品丝袜久久久久久不卡| 国产精品成人一区| 亚洲免费一级电影| 亚洲第一视频网站| 国产精品久久久久影院日本| 欧美成人高清视频| 久久精品国产清自在天天线| 美日韩精品免费视频| 欧美在线性视频| 成人免费午夜电影| 国内精品模特av私拍在线观看| 国产精品色悠悠| 欧美激情喷水视频| 亚洲无亚洲人成网站77777| 国产精品夫妻激情| 亚洲精品网址在线观看| 欧美亚洲成人免费| 国产精品一区二区av影院萌芽| 黑人巨大精品欧美一区二区免费| 久久久久久久久久久免费| 亚洲色图18p| 国产精品免费观看在线| 日韩hd视频在线观看| 亚洲自拍小视频免费观看| 韩曰欧美视频免费观看| 在线丨暗呦小u女国产精品| 国产69精品久久久久9999| 成人av色在线观看| 国产精品视频在线观看| 国产精品激情av电影在线观看| 孩xxxx性bbbb欧美| 亚洲人精品午夜在线观看| 综合网日日天干夜夜久久| 日韩欧美精品在线观看| 亚洲欧美另类在线观看| 欧美激情亚洲视频| 欧美成人午夜影院| 国产精品美女久久久久av超清| 亚洲综合日韩中文字幕v在线| 91精品国产自产91精品| 欧美视频精品一区| 91精品国产色综合久久不卡98口| 国产69精品久久久久久| 日本最新高清不卡中文字幕| 97视频在线观看免费| 亚洲福利在线播放| 国产主播喷水一区二区| 国产免费久久av| 中文字幕亚洲国产| 97视频在线播放| 国产精品尤物福利片在线观看| 欧美成人第一页| 成人黄色生活片| 狠狠色香婷婷久久亚洲精品| 久久久女人电视剧免费播放下载| 亚洲午夜国产成人av电影男同| 色偷偷噜噜噜亚洲男人的天堂| 国产日韩中文字幕| 在线性视频日韩欧美| 中文字幕一区日韩电影| 国产精品美女免费看| 亚洲男人天堂2024| 亚洲女人天堂视频| 亚洲精品动漫久久久久| 久久久久一本一区二区青青蜜月| 91av视频在线观看| 国产精品91久久久久久| 精品国产欧美一区二区五十路| 国产成人亚洲精品| 欲色天天网综合久久| 日韩精品视频在线| 久久久久国色av免费观看性色| 久久亚洲欧美日韩精品专区| 色与欲影视天天看综合网| 26uuu久久噜噜噜噜| 国产欧亚日韩视频| 久久精品中文字幕一区| 国产精品一区二区三区久久久| 日韩一区二区av| 欧美国产日产韩国视频| 伊人伊成久久人综合网小说| 欧美成人精品在线视频| 91免费国产视频| 91在线免费观看网站| 欧美一级淫片丝袜脚交| 91精品国产综合久久香蕉922| 久久精品人人爽| 懂色av中文一区二区三区天美| 美女视频黄免费的亚洲男人天堂| 成人精品久久一区二区三区|