RuntimeException的父类(未检查的异常的基类)如何成为Exception(检查的异常的基类)?

时间:2019-03-27 08:57:33

标签: java java-8

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

问题-它如何工作?

我的理解-Idea-Exception类将使用boolean toCheck()方法,该方法将return为真或为假,以告知编译器检查是否存在检查异常与否。

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

它是如何工作的?

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

3 个答案:

答案 0 :(得分:3)

该规范在§11.1.1. The Kinds of Exceptions中非常清楚:

  

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

     

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

因此,这的确确实“烧”进了编译器-意味着它确实特别了解RuntimeException

答案 1 :(得分:3)

您的理解不正确。运行时异常未设计为未检查异常的基类

来自oracle文档

  

Throwable及其所有子类共同是异常类。

     

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

     

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

     

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

     

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

答案 2 :(得分:1)

让我们看看docs.oracle.com中的Exception定义。

“ Exception类及其子类是Throwable的一种形式,它指示合理的应用程序可能希望捕获的条件。”

“类Exception以及不是RuntimeException子类的任何子类都是检查的异常。”

因此永远不会告诉您Exception是仅用于已检查异常的基类。它是这两个异常的基类。所有检查的异常以及运行时异常。

根据继承属性,子类将继承父类的方法和变量(受访问说明符的限制),并且还将具有自己的属性。