引入异常处理机制的目的

时间:2009-09-04 06:00:33

标签: design-patterns

我从维基百科知道,例如,exception handling在应用程序中用于以故障安全方式自定义处理某些错误。但是,我不确定为什么在这些情况下,开发人员会希望用户体验错误以便以故障安全的方式重置。以下是我正在做的伪代码(但我不确定在这种情况下异常的最大目的是什么)。

while(not exitting the program)
{
    try
    {
              Perform(); // perform custom calculation by calling
    }
    catch(int e)
    {
            sort out what e stands for
            reset the variables of the object
    }
    catch(...)
    {
            print message
            reset the variables of the object
    }
}

听到一些评论会很棒。提前谢谢。

3 个答案:

答案 0 :(得分:3)

异常处理通常被认为比替代方案好得多。

即。忽略错误或检查反向代码。

一般来说,当你发现错误时,你可以做三件事(或四件事)。

1 - 处理它/忽略它。如果您认为异常不会干扰程序的正确运行,那么这是正确的操作。例如文件结束类型例外。

2 - 尝试替代方案。例如如果“找不到文件”,则创建一个包含默认值的新文件并打开它。

3 - 将技术错误转换为用户可理解的错误并通知用户。例如对30行com.java.jdbc SQL异常...消息的实例读取您告诉用户'所请求的产品代码的无价格信息'

4 - 仅在Java世界中 - 每个人都讨厌必须这样做 - 将异常传递给调用进程。

从编程风格的角度来看,异常处理的一个主要优点是将数字错误处理代码与执行业务逻辑的“真实”分离,繁琐的声明,捕获和抛出过程您不希望在代码中处理的异常会导致普通Java程序中出现大量令人分心的混乱。

答案 1 :(得分:3)

异常处理的想法不是抑制错误,而是在恶劣的情况下做到最好。

我们以一个简约的浏览器应用程序为例。而且假设您正在尝试从服务器打开一个网页,该网页目前无法访问。

在最低级别,您可能会收到套接字异常,因为远程服务器不接受任何连接(取决于框架)。现在你基本上有两个选择:

  1. 让浏览器应用程序与操作系统提供的一般错误消息一起消失。
  2. 处理错误并充分利用它:显示错误页面并启用重试按钮。
  3. 在某种程度上,错误并未真正被忽略,但也不允许您的应用程序崩溃。

    浏览器示例是典型情况:您有一些低级错误,但您不允许它使您的应用程序崩溃。相反,您的应用程序可以从中恢复,并可能提供其他操作。

答案 2 :(得分:2)

异常处理实际上与用户没有任何关系,它是将错误处理逻辑与“正常”逻辑分开。像C ++和Java这样的语言具有如下结构:

try {
  makeDough();
  bakeBread();
  eatIt();
}
catch(RecipeNotFollowed error) {
  tellSomeoneToThrowTheDoughOutAndStartOver();
}
catch(OvenNotOn error) {
  tellSomeoneToTurnTheOvenOn();
}

try部分用于“正常”逻辑。用于错误处理的catch部分。他们划分了两种逻辑并简化了错误处理。考虑具有错误代码的替代方案:

boolean doughMadeCorrectly = makeDough();

if(!doughMadeCorrectly) {
  tellSomeoneToThrowTheDoughOutAndStartOver();
  return false;
}

boolean breadHotAndCrispy = bakeBread();

if(!breadHotAndCrispy) {
  tellSomeoneToTurnTheOvenOn();
  return false;
}

eatIt();

return true;

有点愚蠢的例子,但我认为它显示了处理错误的两种主要方式之间的巨大差异。将两种逻辑组合在一起的一种方式是,它们是散布的另一种方式。我认为异常处理更加清晰。