java 编译器和JVM如何建立并识别RuntimeException作为未检查类型的起始点?

6tqwzwtp  于 2023-09-29  发布在  Java
关注(0)|答案(1)|浏览(106)

在Java中,根据下面的类层次结构

Object
 Throwable
  Error
   Abort
   ...
  Exception
   AbortException
   ...
   RuntimeException
    ...

我知道 checkedunchecked 术语的概念和区别,前者是Exception的所有子类,后者是RuntimeException的所有子类。当然,还有关于try/catchthrows语法的限制。
因为RuntimeException也是Exception的子类。

问题

  • 编译器和JVM如何建立并识别RuntimeException作为未检查类型的起点?

或者换句话说:

  • 两者如何建立/认识到RuntimeException层次结构必须 * 不 * 将其视为已检查?
  • *Java**本身是如何通过自己的代码实现这个 * 规范 * 的?
vpfxa7rd

vpfxa7rd1#

术语“检查的异常”中的词语“检查的”是指在编译时间期间检查的异常。JVM不知道任何关于检查异常的信息。它类似于泛型,在编译过程中帮助你捕捉潜在的问题;“类型擦除”将泛型类型中的所有类型参数替换为它们的边界,或者如果类型参数是无边界的,则替换为Object。因此,生成的字节码只包含普通的类、接口和方法。所以,JVM对泛型一无所知。
顺便说一下,检查的异常类是Throwable的所有子类,而不是RuntimeException及其子类和Error及其子类。

相关问题