【问题标题】:What would be a good reason to catch throwable?捕捉 throwable 的充分理由是什么?
【发布时间】:2018-08-23 07:54:33
【问题描述】:

我读了很多关于为什么你不应该抓住“Throwable”的东西。这不是我要问的,因为这对我来说非常明显。 但实际情况是什么,在哪些情况下这样做才有意义?我到处都看到,对我来说,这样的代码完全被破坏了。

我能想到的可能是一个看门狗,它监视一个应用程序并在它崩溃时重新启动它。不确定这是否有意义,但应用程序永远不应该在它自己的代码库中观察包括错误在内的异常,对吧?

【问题讨论】:

  • 如果您可以在现场处理它,而不会破坏整个流程,为什么不呢?这一切都取决于要求。
  • @Stultuske 当然可以,但是您显然不想捕获诸如“OutOfMemoryError”之类的东西并将自己置于高于 JVM 的位置,因为如果您不让应用程序运行,之后应用程序将不健康它死了。至少,我是这么想的。也许您可以将其用于日志记录,但如果发生错误,我的理解是,应用程序必须崩溃。
  • @ernest_k 这与这个问题完全相反
  • 在某些情况下捕获错误并继续是合适的。例如:在一个 servlet 中,如果您遇到 OutOfMemoryError 因为某个特定请求碰巧吃掉了所有内存,您可以尝试继续,因为在处理请求后对象将被 GC。

标签: java exception error-handling exception-handling throwable


【解决方案1】:

一个很好的理由是,如果您希望应用程序将有关错误的信息写入日志文件或类似文件。

【讨论】:

    【解决方案2】:

    在异常处理方面有两种思想流派。第一个声明捕获异常是鲁莽的,因为它们展示了代码中应该修复的问题。另一种方法是在您期望异常或调试时使用异常,我将提供两个设备之间的任何通信作为示例,因为在这些应用程序中省略 catch 块可能会使程序因无法控制但可预见的连接问题而崩溃。我认为建议 catch 块在可以理解和计划的情况下占有一席之地是合理的,确保只捕获可预见的异常,而那些没有考虑到的异常会导致程序崩溃并让您知道需要修复的内容。

    【讨论】:

      【解决方案3】:

      例如检查Hystrix - 如果由于 HTTP 请求而出现错误,您可以重试并回退到它 - 这比由于 HTTP 请求错误而仅仅抛出异常要好。

      【讨论】:

      • 对于这些情况,听起来更精确的 catch 比一般的 throwable 更合适。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-27
      • 2013-03-23
      • 2012-06-17
      • 2011-06-08
      相关资源
      最近更新 更多