当前位置: 首页 > 面试题库 >

您是否真的需要“最终”障碍

温嘉玉
2023-03-14
问题内容

java中的try … catch … finally块共有3种排列。

  1. 试着抓
  2. 尝试…抓住…最后
  3. 尝试…最后

一旦执行了finally块,控制权将移至finally块之后的下一行。如果我删除了finally块并将其所有语句移到try …
catch块之后的行,那么与将它们放入finally块中的效果相同吗?


问题答案:

我认为willcode最接近在这里表达关键点,也许每个人都知道,但不清楚。

问题是您的要求确实存在一些问题:“如果我在catch块之后编写所有语句,而不是将它们写入到finally块中,那么会出错吗?”

如果将所有语句写在catch块之后,则意味着

1)您将始终捕获异常。

2)捕获异常后,您将始终继续执行下一条语句。

这意味着您将始终在异常发生后“正常”继续执行,这实际上是您实际上 从未 希望执行的事情。

例外应该就是这样-例外。如果实际上您可以处理异常,那么编写代码时首先考虑这些条件总是更好,而根本不要导致异常。如果您遵循此模型,那么异常确实是例外-
您无法预期或至多无法解决的情况。真的没想到您应该努力。 这通常意味着您无法处理真正的异常,这也意味着您不应该只是继续执行,而通常是结束应用程序。

通常要做的是允许错误传播回调用堆栈。有人说,这样做是偶然的,链中较高的某个人可能会处理它。我要说的是,从没有发生过,这样做有两个实际目的。一种可能是用户可以修复的东西,如果有的话。因此,您可以将错误传播回去,直到到达可以将其报告给用户的位置为止。或两个,用户无法修复它,但您想获取整个调用堆栈进行调试。然后,将其捕获到顶部即可正常失败。

现在,finally块对您应该具有更多的意义。大家都说它总是运行。对finally的最清晰使用实际上是在尝试…
finally块。您现在要说的是,如果代码运行正常,那就太好了。我们仍然需要进行一些清理,并且最终总是执行然后继续。但是,如果发生异常,我们现在确实需要finally块,因为我们可能仍需要进行一些清理,但是我们不再在这里捕获异常,因此我们不再继续。对于确保清除发生,finally块是必不可少的。

异常总是使执行停止的想法可能很难被某人掌握,除非他们有一定的经验,但这实际上是总是做事的方式。如果发生了错误,那么它可能很小,您应该首先考虑它,否则,越来越多的错误等待发生。

“吞并”错误-捕获它们并继续前进是您最糟糕的事情,因为程序变得不可预测,并且您无法找到并修复错误。

编写良好的代码将包含必要的try … finally块,以确保无论结果如何,始终释放资源。但是编写良好的代码通常只包含少量的try …
catch块,这些块主要是为了使应用程序尽可能正常地失败或延迟用户而存在,这意味着至少始终将消息传递给用户等。但是您通常不只是发现错误并继续前进。



 类似资料:
  • 问题内容: 我正在编写一个简单的应用程序,以使用AES / CBC(模式)对我的消息进行加密。据我了解,CBC模式需要IV参数,但我不知道为什么我的代码在不使用IV参数的情况下也能工作。任何人都可以解释为什么?谢谢。 打印的加密消息:T9KdWxVZ5xStaisXn6llfg ==毫无例外。 问题答案: 不带IV使用时,对于包括AES在内的某些类型的密码,它将隐式使用0 IV。请参阅Cipher

  • 问题内容: AFAIK,您无需在onclick中指定协议: 坏 好 今天,我在GoogleAnallytics上注意到他们正在使用它: 这个例子是完全错误的,还是有理由指定除?以外的其他内容? 问题答案: 这里的一些响应声称“javascript:”前缀是“过去的遗留物”,这意味着浏览器有意对它进行了特殊处理,以实现向后兼容。是否有确凿的证据证明是这种情况(有人检查过源代码)吗? 对我来说,它的意

  • 问题内容: 众所周知,Windows使用带反斜杠的路径,而Unix使用带反斜杠的路径。node.js提供了始终使用正确的斜杠。因此,例如,您不必编写Unix,而只编写Unix 。 但是,似乎存在这种差异,但是如果您不对路径进行规范化(例如,使用path.join),而仅编写诸如node.js之类的路径,则在Windows上运行脚本没有问题。 那么,有没有写上任何好处了?无论平台如何,两者似乎都可以

  • 问题内容: 在这里说这是必需的 但是我看到即使我没有指定action属性,表单也会被提交,并且表单也将被提交到当前页面,这正是我想要的。 问题答案: 该要求仅按 标准 。完全有可能在页面上执行任何操作而不遵循标准。如果执行此操作,则可能无法正常显示或工作,但很可能会正确显示或工作。目标是关注它们,其思想是,如果您遵循它们,您的页面将 始终 有效;您不必担心任何事情。 是的,该表单 必须 具有HTM

  • 问题内容: 关于BlackBerry的push技术,似乎没有大量的信息。我唯一想完成的就是在黑莓设备可用时向它们发送通知。为此,我真的需要TomCat和MySQL吗?我的Java程序不是Servlet,对于Web而言,我使用PHP并通过套接字与Java通信。 我正在使用Java,如果有人知道一些示例,那就太好了。 问题答案: 您可以使用任何语言推送到服务器。您唯一需要的是PUSH SDK的演示AP

  • 问题内容: 使用JAXB时是否始终需要ObjectFactory类? 没有它,我得到这个异常: javax.xml.bind.JAXBException:“ com.abc”不包含ObjectFactory.class或jaxb.in​​dex 我搜集到的ObjectFactory可以说是矫kill过正。但是鉴于这个例外,我猜您需要它。.但不确定为什么吗? 问题答案: 当您使用factory方法时