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 阅读(1758) 评论(4)  编辑  收藏 所属分类: javaview.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



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


只有注册用户登录后才能发表评论。


网站导航: