jinfeng_wang

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

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

          上篇:http://www.aygfsteel.com/jinfeng_wang/archive/2006/05/11/45726.html

          先來(lái)回復(fù)兩個(gè)回帖:
          "你可以把IO等異常轉(zhuǎn)化成你類庫(kù)中中定義的異常。當(dāng)然你定義的異常是Checked Exception 還是 UnChecked Excetion 那你自己定了。 "

          假設(shè)我按照這條建議去做了,那么我可以拋出XXXLibException。假設(shè)我的異常采用的是CheckedException,那么客戶程序員可以捕捉它。但是對(duì)于不同的出錯(cuò)原因(例如不同的原因,包括無(wú)權(quán)限、硬盤滿、U盤被拔了等等,導(dǎo)致無(wú)法正常寫日志文件),程序都是捕捉XXXLibException,那么客戶程序員就無(wú)法根據(jù)不同的異常去做相應(yīng)的處理(例如提示用戶修改權(quán)限、直接啟用備用目錄,直接退出程序)??傊绻惓n愋筒煌?,客戶程序可以根據(jù)“異常類型”做不同的工作(編譯器+工具可以實(shí)現(xiàn)自動(dòng)代碼生成);但是如果全部合并為一個(gè)異常,那么客戶程序只能根據(jù)“ExceptionMessage”嘗試著做不同的工作(恰恰目前沒(méi)有辦法完成自動(dòng)編碼)。



          "要知道 JDK 的 FileWriter 是可以拋出 IOException 的子類的,只要文檔足夠詳細(xì),Java代碼中也可以只去捕捉更明細(xì)的異常, 也可以就捕捉并重新拋出包裝過(guò)的異常(甚至是RuntimException),除非呆板地去捕獲每個(gè)異常,不然代碼怎么會(huì)丑陋呢?"

          RuntiomeException,也就是UncheckedException(類于.NET的Exception),它不會(huì)要求客戶代碼強(qiáng)行捕捉異常,據(jù)此我寫了下面的一個(gè)程序:
          private void button1_Click(object sender, System.EventArgs e)
          ??{
          ???throw new Exception("s");
          ??}
          ?????我只試了.NET的程序,出現(xiàn)的界面大家自己試?。因?yàn)閁ncheckedException沒(méi)有要求客戶程序去捕捉(客戶程序員不能自覺(jué)的發(fā)現(xiàn)庫(kù)中拋出的各種異常),讓最終用戶直接面對(duì)這樣的異常,是一個(gè)道德的事情么?

          posted on 2006-05-12 20:21 jinfeng_wang 閱讀(1297) 評(píng)論(2)  編輯  收藏 所屬分類: javaview.Net

          評(píng)論

          # re: Checked Exception VS UnChecked Excetion (續(xù)) 2006-05-12 20:55 原創(chuàng)專欄 開(kāi)源學(xué)習(xí)
          但是對(duì)于不同的出錯(cuò)原因(例如不同的原因,包括無(wú)權(quán)限、硬盤滿、U盤被拔了等等,導(dǎo)致無(wú)法正常寫日志文件),程序都是捕捉XXXLibException
          難道你的類庫(kù)只寫一個(gè)異常類嗎?我指的可不是一個(gè)類庫(kù)一個(gè)異常??!
          建議樓主看看jdk的源碼吧!
          看看spring怎么處理DAO出現(xiàn)的異常吧。我感覺(jué)比較經(jīng)典。

          http://static.springframework.org/spring/docs/1.2.x/reference/dao.html  回復(fù)  更多評(píng)論
            

          # re: Checked Exception VS UnChecked Excetion (續(xù)) 2006-05-13 14:08 thinkbase
          "因?yàn)閁ncheckedException沒(méi)有要求客戶程序去捕捉" ---- 照這么說(shuō), .Net 的異常不是全都是 UncheckedException 嗎? 我說(shuō)過(guò)可以拋出 RuntimeException, 可是我沒(méi)有說(shuō)你只需要使用一種 RuntimeException 啊, 如果 Java 開(kāi)發(fā)人員希望以 .Net 的異常處理風(fēng)格開(kāi)發(fā)一個(gè)庫(kù), 他完全可以把拋出的異常都定義為 RuntimeException 的不同子類;

          記住, 我們不僅可以使用現(xiàn)有的各種 Exception 類, 很多情況下我們還需要自己設(shè)計(jì)一個(gè)自定義 Exception 的層次結(jié)構(gòu)哦.

          上面那條評(píng)論提到的那個(gè)鏈接, 建議去看看.

          BTW, 這么討論下來(lái), 我倒決定 Java 在這方面比 .Net 有更多選擇 :)  回復(fù)  更多評(píng)論
            

          主站蜘蛛池模板: 阿克| 吕梁市| 崇左市| 靖边县| 萍乡市| 长治县| 雷山县| 依安县| 新余市| 金乡县| 镇雄县| 阜平县| 海淀区| 古交市| 阿克苏市| 富锦市| 喀喇| 平远县| 珲春市| 松溪县| 临潭县| 三亚市| 辽中县| 通道| 如皋市| 潼关县| 伊金霍洛旗| 三台县| 呼玛县| 禹州市| 紫云| 蒙城县| 监利县| 宝兴县| 巴里| 南安市| 治县。| 岳西县| 灵璧县| 太谷县| 葫芦岛市|