jinfeng_wang

          G-G-S,D-D-U!

          BlogJava 首頁(yè) 新隨筆 聯(lián)系 聚合 管理
            400 Posts :: 0 Stories :: 296 Comments :: 0 Trackbacks

             假設(shè)我的團(tuán)隊(duì)正在開(kāi)發(fā)一個(gè)庫(kù)程序,由于某種原因,現(xiàn)在希望能夠得到所有最外層 API 所拋出的所有異常的類(lèi)型、各自的信息、并且能夠附上各種異常所出現(xiàn)的原因和解決辦法。如果開(kāi)發(fā)過(guò)程中內(nèi)部使用的是 Unchecked Exception ,那么對(duì)于這個(gè)任務(wù)簡(jiǎn)直就麻煩了。沒(méi)辦法,開(kāi)發(fā)人員一個(gè)個(gè)的自我進(jìn)行檢查然后統(tǒng)計(jì)吧,但是往往這樣的統(tǒng)計(jì)總會(huì)有漏網(wǎng)之魚(yú)。現(xiàn)在的 MSDN 中的異常信息糟糕的很,最底層的公有庫(kù)的異常信息內(nèi)容可能完整一點(diǎn),但是上層的庫(kù)的異常信息糟糕的不行,根本不能完整的報(bào)全所有出錯(cuò)的可能性。

          你可以想象的出,一個(gè)庫(kù)函數(shù)的異常信息不完整,對(duì)于他的用戶(hù)來(lái)說(shuō),是多么不友好的事情。假設(shè) MSDN File.Open() 會(huì)拋出 IOException ,你的程序就很難想到很規(guī)矩的對(duì) IOException 做了 catch ,然后提示用戶(hù)檢查相應(yīng)位置的文件是否存在 / 被打開(kāi)等。別指望 MSDN 的那些信息能夠?qū)K端用戶(hù)有多大的幫助,太多不懂計(jì)算機(jī)的人在傻呆呆的握著鼠標(biāo)了。再加上 MicroSoft 的提示信息本身就存在著“答非所問(wèn)”,“莫名其妙”的事情,用戶(hù)看到這些情況就更不知道怎么解決問(wèn)題了。再加上自己的應(yīng)用程序中會(huì)彈出一個(gè)個(gè)“蹩腳”的運(yùn)行時(shí)錯(cuò)誤的錯(cuò)誤框,真的不是一個(gè)很如意的創(chuàng)作。

          ? ? ? ? 但是,如果使用的是 Checked Exception ,這時(shí)候編譯器會(huì)強(qiáng)迫你的外部接口的異常相當(dāng)?shù)耐暾钇鸫a可以做到比 MSDN 的異常類(lèi)型齊整。

          ?

          ?

          ?

          ?

          posted on 2006-06-03 21:22 jinfeng_wang 閱讀(1971) 評(píng)論(5)  編輯  收藏 所屬分類(lèi): javaThinkingview.Net

          評(píng)論

          # re: Checked Exception VS UnChecked Excetion (續(xù)2) 2006-06-03 22:32 quitgame
          Checked Exception 確實(shí)有很多好處,但需要開(kāi)發(fā)人員具有對(duì)異常比較深刻的理解,否則寫(xiě)出的代碼可能是 throws Exception catch(Exception) 這種,還不如沒(méi)有,  回復(fù)  更多評(píng)論
            

          # re: Checked Exception VS UnChecked Excetion (續(xù)2) 2006-06-04 00:06 CowNew開(kāi)源團(tuán)隊(duì)
          總感覺(jué).net的異常機(jī)制不如java的好,異常不捕獲也照樣能編譯,好可怕。  回復(fù)  更多評(píng)論
            

          # re: Checked Exception VS UnChecked Excetion (續(xù)2) 2006-06-08 09:47 denis長(zhǎng)明
          @CowNew開(kāi)源團(tuán)隊(duì)
          Java 里面的異常是分成兩種的了,正是標(biāo)題所說(shuō)的checked 和 unchecked的 checked的都是從Exception繼承過(guò)來(lái)的,只要在程序里面throw了就一定要catch,否則編譯通過(guò)不了, 還有一種繼承自RuntimeException 這里面的異常可以隨便throw, 可以不用catch, 現(xiàn)在很多框架都設(shè)計(jì)成unchecked的了, 比如很多數(shù)據(jù)庫(kù)操作, SqlException 很多人catch了后只是log了一下, 根本就沒(méi)有做任何的處理,這樣的異常不catch也罷,為了給客戶(hù)一個(gè)友好的界面,你可以在框架最外層catch一下Throwable然后轉(zhuǎn)換成對(duì)應(yīng)的錯(cuò)誤信息.   回復(fù)  更多評(píng)論
            

          # re: Checked Exception VS UnChecked Excetion (續(xù)2) 2006-06-08 23:11 jinfeng_wang
          "SqlException 很多人catch了后只是log了一下, 根本就沒(méi)有做任何的處理"

          你只是假設(shè)了某些用戶(hù)的習(xí)慣,但是對(duì)于某一部分的用戶(hù),他想做一些特殊的處理操作,那么單純的SqlException能夠滿(mǎn)足要求么?
          其次,如果用戶(hù)的習(xí)慣都改過(guò)來(lái)了,那么SqlClient如何應(yīng)對(duì)這樣的要求?SqlClient重新實(shí)現(xiàn)??
          再次,我們現(xiàn)在談的不局限于SqlException,我們討論的是方法學(xué),程序設(shè)計(jì)的方法學(xué)。
          這個(gè)討論我會(huì)繼續(xù)下去的。
          請(qǐng)記住一點(diǎn),現(xiàn)在很多人已經(jīng)用“Exception”做為程序流程的控制依據(jù),因?yàn)镃heckedException是要求客戶(hù)端捕捉的,而用返回值是不能達(dá)到控制用戶(hù)程序的,所以很多時(shí)候CheckedException用來(lái)做“程序流程控制”也是合理的。

            回復(fù)  更多評(píng)論
            

          # re: Checked Exception VS UnChecked Excetion (續(xù)2) 2008-09-17 11:35 aaaa
          asdasd  回復(fù)  更多評(píng)論
            

          主站蜘蛛池模板: 乾安县| 千阳县| 新蔡县| 黔东| 融水| 克拉玛依市| 左云县| 博白县| 延安市| 乌海市| 九江县| 南城县| 武宣县| 江口县| 泸州市| 从江县| 康定县| 江山市| 交城县| 肇源县| 喜德县| 新泰市| 南京市| 黎城县| 聂拉木县| 应城市| 稷山县| 丹棱县| 禹州市| 汽车| 威远县| 保德县| 绥宁县| 哈巴河县| 云安县| 玛曲县| 海城市| 泌阳县| 黄大仙区| 东港市| 土默特右旗|