抛出一个异常

这个程序的最有趣的部分是mysqrt()功能,这可能会引发一个异常。不过,你会注意到这个异常没有在try块!这意味着mysqrt愿意说,“嘿,这是个问题!“,但不愿意处理问题本身。是的,在本质上,下放责任给它的调用者(如何使用返回代码相当于通过处理一个错误返回函数的调用者的责任)。

让我们重温一下发生了什么时,抛出一个异常。首先,程序查看异常能立即处理(这意味着它被扔在try块)。如果不是,它立即终止当前函数以及查看来电处理异常。如果不是,它终止呼叫方和检查调用者的调用。每个功能是终止序列到异常的处理程序被发现,直到main()终止。这个过程被称为退栈(如果你需要在调用堆栈上看到什么进修栈和堆的教训)。

现在,让我们详细看看如何应用于该项目在mysqrt(4)称,抛出一个异常。

首先,程序检查看如果我们立即在try块内的功能。在这种情况下,我们不。然后,开始解开堆栈。首先,mysqrt()终止,并且控制返回到main()。该计划现在检查看看我们在try块。我们,还有一个字符串处理,所以处理异常的试块在main()。总结,mysqrt()引发异常,但在main() try/catch块是一个捕获和处理异常。

在这一点上,你们中有些人可能想知道为什么这是一个好主意,错误传递回调用方。为什么不让mysqrt()处理它自己的错误?问题是,不同的应用程序可能需要以不同的方式处理错误。控制台应用程序可能需要打印的文本消息。一个Windows应用程序可能会弹出错误对话框。在一个应用程序,这可能是一个致命的错误,和在另一个应用程序可能不。通过误差后退堆栈,每个应用程序可以从中的方式,是它最上下文mysqrt()适当处理一个错误!最终,这使mysqrt()尽可能模块,和错误处理可以放在代码的模块化部件越少。

另一个退栈的例子

这里的另一个例子显示退栈在实际应用中,使用一个较大的堆栈。虽然这个计划是长期的,这很简单:main()电话first(),first()电话second(),second()电话third(),third()电话last(),和last()抛出一个异常。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值