【问题标题】:How to enumerate all possible errors in Java? [closed]如何枚举Java中所有可能的错误? [关闭]
【发布时间】:2015-11-06 19:02:18
【问题描述】:

我不是指单个程序中的每个错误,我指的是 Java 8 中可能出现的每个错误。Java Docs 中的某个地方可以找到它吗?

【问题讨论】:

  • Throwable 的所有子类都是您的枚举。
  • 每个子类是否对应一个错误?
  • 可能我不明白你的问题。枚举所有错误是什么意思?
  • 我的意思是获取可以停止程序的每种错误类型的列表,以及启动它们的原因。
  • 不,因为 (a) 任何程序员都可以声明自己的异常,如果抛出而没有被捕获,程序将停止。您无法枚举尚不存在的内容。 (b) JVM 中总是有可能出现导致异步错误的错误。这是你事先不知道什么会启动它的东西。 (c) 人们可以以自己的方式使用现有的例外。因此,情况再次无法得知。

标签: java error-handling


【解决方案1】:

在我看来,这更像是一个研究问题,而不是一个可靠的实现,但无论如何,你有两条询问线:

1) 编译后可能发生的任何错误都只会作为 Throwable 类型的实例发生,如果您想跟踪所有这些错误,您需要包含运行时库的每个部分(以及任何其他可能的用户包含在您的项目中的已定义库)在您打算用来向您或您正在运行的项目程序报告它们的类中。然后,您将遍历所有当前定义的类,使用反射填充,因为您进入一个列表,其中包含任何返回 true 作为 instanceof Throwable 的内容——假设您想要所有可能的类名。这些异常的潜在原因只能通过与任何给定 Throwable 类相关的文档来暗示。

2) 另一方面,如果您还想要所有编译时错误,那么您需要查看 Java 编译器的源代码。

但老实说,异常被称为异常的原因是因为它根据异常情况报告错误,您应该能够在开发过程中抢占先发制人。任何足以阻止程序运行的错误都会引发异常并在不识别特定类型的情况下捕获任何 Throwable 不应该考虑实施 - 除非使用最后机会的沙龙心态(如果我的软件在所有情况下都没有解决这个问题我可以预见到它可能能够在不完全跌倒的情况下重置为零。

【讨论】:

    【解决方案2】:

    您可以通过查看 java.lang 包的 package tree view 并导航到 Throwable 来很好地了解这些内容(您可以通过在导航栏中选择 Tree 进入此视图)

    Throwable 是 Java 中所有错误和异常的根源。值得注意的例外是

    • java.lang.Error:异常/致命错误的根源
    • java.lang.Exception: 已检查异常的根 [*]
    • java.lang.RuntimeException:未检查异常的根源

    [*] 如果扩展 Exception 但不扩展 RuntimeException

    【讨论】:

      猜你喜欢
      • 2016-11-28
      • 2021-05-07
      • 1970-01-01
      • 2012-06-26
      • 1970-01-01
      • 2010-11-24
      • 1970-01-01
      • 2016-09-17
      • 2011-01-17
      相关资源
      最近更新 更多