首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >引入异常处理机制的目的

引入异常处理机制的目的
EN

Stack Overflow用户
提问于 2009-09-04 06:00:33
回答 3查看 105关注 0票数 2

例如,我从维基百科上了解到,在应用程序中使用exception handling以故障保护的方式自定义处理某些错误。然而,我不确定为什么在这些情况下,开发人员通常会希望用户体验到以故障安全的方式重置错误。下面是我正在做的事情的伪代码(但我不确定这个异常的最大目的是什么)。

代码语言:javascript
运行
复制
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
    }
}

如果能听到一些评论就太好了。提前谢谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-09-04 06:30:37

异常处理的思想不是抑制错误,而是在糟糕的情况下做到最好。

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

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

  1. 让浏览器应用程序终止,以及操作系统提供的一般错误消息。
  2. 处理错误并充分利用它:显示错误页并启用重试按钮。

在某种程度上,错误并没有真正被忽略,但也不允许它使您的应用程序崩溃。

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

票数 3
EN

Stack Overflow用户

发布于 2009-09-04 06:14:17

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

即忽略错误或检查返回代码。

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

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

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

3-将技术错误转换为用户可理解的错误,并通知用户。例如,30行com.java.jdbc SQL异常的instread ...您告诉用户“请求的产品代码没有价格信息”的消息

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

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

票数 3
EN

Stack Overflow用户

发布于 2009-09-04 06:25:51

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

代码语言:javascript
运行
复制
try {
  makeDough();
  bakeBread();
  eatIt();
}
catch(RecipeNotFollowed error) {
  tellSomeoneToThrowTheDoughOutAndStartOver();
}
catch(OvenNotOn error) {
  tellSomeoneToTurnTheOvenOn();
}

try部分用于“正常”逻辑。用于错误处理的catch部分。它们区分了这两种逻辑,并简化了错误处理。考虑使用错误代码的替代方案:

代码语言:javascript
运行
复制
boolean doughMadeCorrectly = makeDough();

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

boolean breadHotAndCrispy = bakeBread();

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

eatIt();

return true;

这是一个有点愚蠢的例子,但我认为它显示了两种主要的错误处理方式之间的巨大差异。一种方式是将这两种逻辑组合在一起,另一种方式是将它们分散在一起。我认为异常处理要干净得多。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1377464

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档