我不知道自定义异常能做什么,内置异常不能做什么。这似乎是一个天真的问题,但我确实对此一无所知。你怎么看?
实际上,你可能根本不需要经常创建自己的异常。但如果你需要,那么这是因为你需要能够抛出和捕获比可用的异常类型更具体的异常类型,并且可能附带附加信息。
如果符合以下情况之一,创建自定义异常是有用的:
但通常,如果框架中已经存在可以使用的异常,则最好使用它,而不是为相同的错误创建自己的异常。
您可以使用它来实现与应用程序相关的特殊错误处理。假设您构建了一个香蕉应用程序,那么您可以拥有一个OutOfBananasException
。如果您的应用程序缺乏香蕉,您可以抛出异常,并在稍后使用特殊错误处理捕获它。
try
{
EatBananas();
}
catch(OutOfBananasException oobe)
{
GetMoreBananas();
}
catch(Exception e)
{
TellUserAndAbort();
}
编辑:在.NET中,只有很少的一些例外情况被特殊处理,比如ThreadAbortException,它通常不能被捕获、处理和忽略。
除此之外,异常类型只是异常类型。你可以像使用框架中定义的异常一样使用自己的异常。
自定义异常允许您做两件事:
只有在没有内置异常以便进行必要处理时才应创建自定义异常。
例如,在我们的应用程序中,当数据层遇到错误时(并将特定的DBMS异常作为内部异常包含在其中),我们会抛出。
我们还有——当我们希望返回一个单一结果但没有结果时,以及——当我们期望返回一个单一结果但得到多个结果时。这使我们能够捕获不同的问题并根据情况对其采取行动。