jinfeng_wang

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

          BlogJava 首頁 新隨筆 聯系 聚合 管理
            400 Posts :: 0 Stories :: 296 Comments :: 0 Trackbacks

          1 .NET Framework IO Interface? and? JDK IO Interface

          1.1 .NET Framework 1.1

          ?? public StreamWriter(??? string path? );

          異常

          異常類型

          條件

          UnauthorizedAccessException

          訪問被拒絕。

          ArgumentException

          path 為空字符串 ("") 。

          ArgumentNullException

          path 為空引用( Visual Basic 中為 Nothing )。

          DirectoryNotFoundException

          指定的路徑無效,比如在未映射的驅動器上。

          PathTooLongException

          指定的路徑、文件名或者兩者都超出了系統定義的最大長度。例如,在基于 Windows 的平臺上,路徑必須小于 248 個字符,文件名必須小于 260 個字符。

          IOException

          path 包含不正確或無效的文件名、目錄名或卷標的語法。

          SecurityException

          調用方沒有所要求的權限。

          ?

          1.2 JDK 1.4.2 :

          public FileWriter(String fileName)? throws IOException

          				Constructs a FileWriter object given a file name. 
          		

          Parameters:

          fileName - String The system-dependent filename.

          Throws:

          IOException - if the named file exists but is a directory rather than a regular file, does not exist but cannot be created, or cannot be opened for any other reason

          ?

          2 、解析

          .NET Excetpion Unchecked 異常,客戶端不要求去 Check 代碼,但是 JAVA 的絕大部分 Checked 異常,它要求客戶端的代碼檢測異常。

          假設一個這樣的場景,方法 OutMethod 調用 InnerMethod ,而內部方法 InnerMethod 拋出的異常 InnerException 。

          對于 Java CheckedException ,或者 OutMethod 去拋出 InnerException ,或者 OutMethod 捕捉 InnerException (然后做處理)。

          ?

          再來觀察一下 JDK FileWriter 的異常聲明,我沒有詳細測試其在各種可能出錯情況下拋出的 IOException 的消息,但是其分類遠遠不如 .NET StreamWriter 。假設 Java 想照抄 .NET StreamWriter ,對于 Java 的使用者來說,無異于惡夢。外部的代碼需要捕獲如此多的異常消息(不捕捉就會在 OutMethod 拋出一大堆的異常,問題繼續傳播下去,這是 CheckException 的一個弱點)。也許正是出于這樣的問題,所以此處 Java 接口的異常聲明比較簡單。

          那么假設我是一個庫設計者,正在用到了 IO 。如果我使用 .NET 進行開發,對于 IOException 來說,我是否有必要捕捉呢?捕捉的目的是為了“處理”,那么對于庫設計者,顯然這時候需要通知其“客戶程序員”出錯的原因,所以這里的庫設計者的行為最好就是“不處理”。如果處理,那只能是“ catch 、再 throw ”。那么這樣的處理顯然是無意義的,因為原始異常已經足以提醒客戶程序員出錯的原因了。如果捕捉,那代碼會特別的丑陋(直接 catch Exception 的行為是不可取的)。

          ?

          CheckedException 的另外一個缺點就是“將 Exceotion 加入了 Interface 的規格聲明“。假設 OutMethod 調用了 InnerMethod ,此時 InnerMethod 的設計者需要增加一個異常,那么會直接影響到 OutMethod 。當然這里的 InnerMethod 的設計者此時已經做了“修改接口聲明“的行為。

          ?

          ?


          ???隨后待續......?

          ?

          ?

          posted on 2006-05-11 21:18 jinfeng_wang 閱讀(1879) 評論(4)  編輯  收藏 所屬分類: java 、view 、.Net

          評論

          # re: Checked Exception VS UnChecked Excetion 2006-05-12 10:14 原創專欄 開源學習
          我覺得我們更應該關注如何用好這兩類異常。

          如果你類庫開發人員。我覺得hibernate3,spring提供的異常處理方法很不錯。

          你可以把IO等異常轉化成你類庫中中定義的異常。當然你定義的異常是Checked Exception 還是 UnChecked Excetion 那你自己定了。
            回復  更多評論
            

          # re: Checked Exception VS UnChecked Excetion 2006-05-12 19:21 ddd
          Checked exception 是java最大的敗筆  回復  更多評論
            

          # re: Checked Exception VS UnChecked Excetion 2006-05-12 19:30 thinkbase
          我感覺你比較的這個場景不能說明什么問題,這個差異其實只是文檔上的差別,要知道 JDK 的 FileWriter 是可以拋出 IOException 的子類的,只要文檔足夠詳細,Java代碼中也可以只去捕捉更明細的異常, 也可以就捕捉并重新拋出包裝過的異常(甚至是RuntimException),除非呆板地去捕獲每個異常,不然代碼怎么會丑陋呢?  回復  更多評論
            

          # re: Checked Exception VS UnChecked Excetion 2006-06-14 12:18 ...
          @ddd



          ..............  回復  更多評論
            

          主站蜘蛛池模板: 定州市| 江口县| 呼玛县| 祁连县| 酉阳| 昭平县| 全椒县| 陇川县| 田阳县| 永昌县| 闸北区| 蒙阴县| 朔州市| 板桥市| 大同市| 阳谷县| 婺源县| 南郑县| 锦州市| 定兴县| 苏尼特左旗| 桂东县| 宜都市| 怀宁县| 库尔勒市| 吐鲁番市| 英超| 郧西县| 马公市| 涟源市| 漠河县| 阿克陶县| 武功县| 庆安县| 内黄县| 静宁县| 额济纳旗| 蕲春县| 都匀市| 刚察县| 碌曲县|