第四节:抛出异常

 

实现自己的方法时,如果方法无法完成方法名指定的任务,就应抛出一个异常,抛出异常时要考虑两个问题。

第一个问题是抛出什么Exception派生类型。应选择一个有意义的类型。要考虑调用栈中位于高出的代码,要知道那些代码如何判断一个方法失败,以便执行一些得体的恢复代码。可直接利用FCL中定义好的一个类型,但FCL中也许找不到一个和你想表达的意思完全匹配的类型,所以可能需要定义自己的类型,只要它最终从Exception派生就好。

如果希望定义一个异常类型层次结构,强烈建议让这个浅而宽,以创建尽量少的基类。原因是基类的作用是将大量的错误当做一个错误,而这通常是危险的。基于同样的考虑,永远都不要抛出一个Exception对象,抛出一起类型时也要特别谨慎。

第二个问题是向异常类型的构造器传递什么字符串消息。抛出异常时,应包含一条字符串消息,详细说明方法为什么没有完成任务。如果异常被捕捉到并进行了处理,用户就看不到该字符串消息,但是,如果异常成为一个未处理的异常,消息通常会被写入日志。未处理的异常意味着程序存在一个真正的bug,开发人员必须修复该bug。最终用户没有源代码或能力去修复bug并重新编译程序。实际上,这个字符串消息最终不应该向用户显示,所以,字符串消息可以包含非常详细的技术细节,以帮助开发人员修正代码。

另外,由于所有开发人员不得不讲英语,所以通常不必本地化异常字符串消息。但是,如果要构建一个非英语开发人员使用的类库,就可能要本地化字符串消息。微软以本地化FCL抛出的异常消息,因为全世界的开发人员都要用这个类库。

 

原文地址:https://www.cnblogs.com/bingbinggui/p/4544821.html