在Java中,根据下面的类层次结构
Object
Throwable
Error
Abort
...
Exception
AbortException
...
RuntimeException
...
我知道 checked 和 unchecked 术语的概念和区别,前者是Exception
的所有子类,后者是RuntimeException
的所有子类。当然,还有关于try/catch
和throws
语法的限制。
因为RuntimeException
也是Exception
的子类。
问题
- 编译器和JVM如何建立并识别
RuntimeException
作为未检查类型的起点?
或者换句话说:
- 两者如何建立/认识到
RuntimeException
层次结构必须 * 不 * 将其视为已检查? - *Java**本身是如何通过自己的代码实现这个 * 规范 * 的?
1条答案
按热度按时间vpfxa7rd1#
术语“检查的异常”中的词语“检查的”是指在编译时间期间检查的异常。JVM不知道任何关于检查异常的信息。它类似于泛型,在编译过程中帮助你捕捉潜在的问题;“类型擦除”将泛型类型中的所有类型参数替换为它们的边界,或者如果类型参数是无边界的,则替换为
Object
。因此,生成的字节码只包含普通的类、接口和方法。所以,JVM对泛型一无所知。顺便说一下,检查的异常类是
Throwable
的所有子类,而不是RuntimeException
及其子类和Error
及其子类。