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 阅读(1948) 评论(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



..............  回复  更多评论