RuntimeException(它是所有未检查的异常的基类)是从Exception类(它是检查的异常的基类)继承的,不是很令人困惑。
问题-它如何工作?
我的理解-Idea-Exception
类将使用boolean toCheck()
方法,该方法将return
为真或为假,以告知编译器检查是否存在检查异常与否。
在RuntimeException extends Exception
中,我们简单地重写boolean toCheck()
方法以始终返回false
。这将告诉编译器不要事先检查异常。
它是如何工作的?
为什么设计者不创建一个新类直接从throwable
继承呢?
答案 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是仅用于已检查异常的基类。它是这两个异常的基类。所有检查的异常以及运行时异常。
根据继承属性,子类将继承父类的方法和变量(受访问说明符的限制),并且还将具有自己的属性。