上篇:http://www.blogjava.net/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没有要求客户程序去捕捉(客户程序员不能自觉的发现库中抛出的各种异常),让最终用户直接面对这样的异常,是一个道德的事情么?