上篇:http://m.tkk7.com/jinfeng_wang/archive/2006/05/11/45726.html
先來回復兩個回帖:
"你可以把IO等異常轉化成你類庫中中定義的異常。當然你定義的異常是Checked Exception 還是 UnChecked Excetion 那你自己定了。 "
假設我按照這條建議去做了,那么我可以拋出XXXLibException。假設我的異常采用的是CheckedException,那么客戶程序員可以捕捉它。但是對于不同的出錯原因(例如不同的原因,包括無權限、硬盤滿、U盤被拔了等等,導致無法正常寫日志文件),程序都是捕捉XXXLibException,那么客戶程序員就無法根據不同的異常去做相應的處理(例如提示用戶修改權限、直接啟用備用目錄,直接退出程序)。總之,如果異常類型不同,客戶程序可以根據“異常類型”做不同的工作(編譯器+工具可以實現自動代碼生成);但是如果全部合并為一個異常,那么客戶程序只能根據“ExceptionMessage”嘗試著做不同的工作(恰恰目前沒有辦法完成自動編碼)。
"要知道 JDK 的 FileWriter 是可以拋出 IOException 的子類的,只要文檔足夠詳細,Java代碼中也可以只去捕捉更明細的異常, 也可以就捕捉并重新拋出包裝過的異常(甚至是RuntimException),除非呆板地去捕獲每個異常,不然代碼怎么會丑陋呢?"
RuntiomeException,也就是UncheckedException(類于.NET的Exception),它不會要求客戶代碼強行捕捉異常,據此我寫了下面的一個程序:
private void button1_Click(object sender, System.EventArgs e)
??{
???throw new Exception("s");
??}
?????我只試了.NET的程序,出現的界面大家自己試?。因為UncheckedException沒有要求客戶程序去捕捉(客戶程序員不能自覺的發現庫中拋出的各種異常),讓最終用戶直接面對這樣的異常,是一個道德的事情么?