【问题标题】:How can the parent class of RuntimeException (which is a base class for unchecked Exceptions) be Exception (base class for checked exceptions)? [duplicate]RuntimeException(它是未检查异常的基类)的父类如何成为异常(已检查异常的基类)? [复制]
【发布时间】:2019-03-27 08:57:32
【问题描述】:

RuntimeException(它是所有未检查异常的基类)继承自 Exception 类,它是已检查异常的基类,这不是很令人困惑。

问题 - 那么它是如何工作的?

我的理解 - 想法 - Exception 类将有一个方法说 boolean toCheck() 它将 return 真或假告诉编译器检查检查的异常与否。

RuntimeException extends Exception 中,我们只需重写boolean toCheck() 方法以始终返回false。这将告诉编译器不要事先检查异常。

它是如何工作的?

另外,为什么设计者不创建一个新类来直接从throwable 继承?

【问题讨论】:

  • 这些类被编译器视为特殊类

标签: java java-8


【解决方案1】:

规范在§11.1.1. The Kinds of Exceptions 中非常清楚地说明了这一点:

未经检查的异常类是运行时异常类和错误类。

已检查的异常类是除未检查的异常类以外的所有异常类

所以这确实被“烧录”到了编译器中——这意味着它确实知道RuntimeException

【讨论】:

    【解决方案2】:

    你的理解不正确 Runtime exception 不是设计为 unchecked exception 的基类

    来自 oracle 文档

    Throwable 及其所有子类统称为异常类。

    Exception 和 Error 类是 Throwable 的直接子类:

    异常是普通程序可能希望从中恢复的所有异常的超类。

    RuntimeException 类是 Exception 的直接子类。 RuntimeException 是所有异常的超类,在表达式评估期间可能由于多种原因引发,但仍可能从中恢复。

    已检查的异常类是除未检查的异常类之外的所有异常类。

    【讨论】:

    • @lynxx 如果它回答了您的问题,请接受
    • 编译器如何知道是否需要检查所需的异常?
    • Checked Exception 是 java.lang.Exception 的子类。因此,除了 java.lang.RuntimeException 中存在的异常之外,编译器会将 Exception 类中存在的所有异常视为已检查异常。
    • 未经检查的异常范围更广,所有不属于未经检查的异常都被编译器视为已检查
    • @Iynxx 请采纳答案
    【解决方案3】:

    让我们从 docs.oracle.com 看一下 Exception 的定义。

    " Exception 类及其子类是 Throwable 的一种形式,表示合理的应用程序可能想要捕获的条件。"

    " Exception 类和任何不是 RuntimeException 子类的子类都是检查异常。"

    所以从来没有人告诉过 Exception 是一个只用于检查异常的基类。它是这两个异常的基类。所有检查的异常以及运行时异常。

    根据继承的属性,子类将继承父类的方法和变量,并应用访问说明符的限制,并且它也将具有自己的属性。

    【讨论】:

    • 编译器如何知道是否要检查它们是否在编译时抛出所需的异常(已检查异常)以及不检查哪些异常(未检查)?
    • 查看您是否在代码中使用了一个类,该类本身或该类的任何方法都引发了检查异常(Java 中定义了检查异常类),那么您的代码必须通过以下方式处理该异常try-catch 或提及投掷。未经检查的异常是那些不会导致编译器停止程序执行的异常。它让代码编译,当遇到 Unchecked 异常时抛出它。所有未经检查的异常基类都是 Runtime Exception,因此编译器永远不会检查 RuntimeException 及其子类以外的任何地方。
    猜你喜欢
    • 2014-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多