我从维基百科知道,例如,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
}
}
听到一些评论会很棒。提前谢谢。
答案 0 :(得分:3)
异常处理通常被认为比替代方案好得多。
即。忽略错误或检查反向代码。
一般来说,当你发现错误时,你可以做三件事(或四件事)。
1 - 处理它/忽略它。如果您认为异常不会干扰程序的正确运行,那么这是正确的操作。例如文件结束类型例外。
2 - 尝试替代方案。例如如果“找不到文件”,则创建一个包含默认值的新文件并打开它。
3 - 将技术错误转换为用户可理解的错误并通知用户。例如对30行com.java.jdbc SQL异常...消息的实例读取您告诉用户'所请求的产品代码的无价格信息'
4 - 仅在Java世界中 - 每个人都讨厌必须这样做 - 将异常传递给调用进程。
从编程风格的角度来看,异常处理的一个主要优点是将数字错误处理代码与执行业务逻辑的“真实”分离,繁琐的声明,捕获和抛出过程您不希望在代码中处理的异常会导致普通Java程序中出现大量令人分心的混乱。答案 1 :(得分: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;
有点愚蠢的例子,但我认为它显示了处理错误的两种主要方式之间的巨大差异。将两种逻辑组合在一起的一种方式是,它们是散布的另一种方式。我认为异常处理更加清晰。