当然,应在您认为的适当级别并适当地处理异常。假设您不知道如何处理已检查的异常,并且您将其包装在适当的自定义未检查异常中只是为了传播到顶层(假设您不处理该包装的异常和其他可能的未检查异常在某些媒介将原始异常发生的级别提高(因为您不想要或不知道如何)。更进一步,所有未处理的异常(未检查和检查,包装在未检查中)都达到了顶层(主方法,webapp 控制器等);我当然应该做点什么。我要做的就是通过使用日志条目通知开发人员出了点问题,并告知用户他的请求可以' t 得到正确的服务(根据适用于该异常的消息使用不同的消息)。为此,我在 catch 块中使用RuntimeException
(如果它捕获到非自定义未经检查的异常,我将向用户发送一条消息“发生严重问题”或类似的信息;此类非自定义未经检查的异常将被缓存的概率大于零,您必须就此进行沟通)。一些文章(第一,第二) 建议不要在 catch 块中按超类型捕获子类的实例(或者它只与检查的异常有关?)。如果我在 catch 块中使用准确类型的异常,我会错过一些未经检查的异常并且应用程序会崩溃(当然,在执行日志记录和通知用户的那些 catch 块中会有重复的代码片段)。例如,我可以提供在 jsp 翻译阶段构建的片段,并使用超类型来捕获该超类型的子类的实例
// some code
try {
// body of translated JSP here...
} catch (Exception e) {
out.clear();
pageContext.handlePageException(e);
}
// some code
我的问题:这个概念RuntimeException
在顶层的 catch 块中用于向开发人员报告所有问题并向用户传达所有发生的问题是否正确?当然,这种情况下的异常处理被简化为只是通知开发人员和用户发生了问题并且没有恢复策略。也许很难将这个概念称为异常处理。请纠正我,我很欣赏关于这个概念的任何想法。