反射是针对类加载器的吗?

我知道反射是一种在不知道具体类型的情况下调用方法或操作字节码的技术。

最近在研究类加载器的时候,看到一篇文章,说反射是让类加载器动态加载类,做类型检查。这是真的?

文章

原文不是英文,所以翻译可能有点奇怪。

在运行时动态加载一个类意味着 JVM 没有关于该类的信息。换句话说,JVM 不知道有关方法、字段和类的继承关系的信息。因此,类加载器应该能够在加载类时获取必要的信息并检查类是否正确。如果您不能这样做,则 JVM 可能具有不匹配的 .class 文件版本,并且将无法进行类型检查。JVM 具有内部分析类的能力,从 JDK 1.1 开始,开发人员可以通过反射来分析这些类。

回答

这段引用的文本中没有任何内容可以得出反射是“用于类加载器”的结论。

文本以“……从 JDK 1.1 开始,开发人员可以通过反射来分析这些类”,这是一个代表自身的附加信息。文本之前讨论过类加载器的事实与此处无关。

当它归结为“几乎从一开始”时提到版本号,表明这是一个相当古老的文本。这解释了部分

类加载器根本不这样做。但是在 Java 1.0 和部分 Java 1.1 中,类加载器确实被认为负责链接和验证任务。这已被 JDK 1.2(也称为 Java 2)清除。从那时起,类加载器的职责仅限于定位必要的资源并将其加载到字节数组中,然后传递给 JVM。链接和验证是 JVM 的工作,这意味着它还将保护自己免受可能损坏的类加载器的影响。

由于类加载器的工作只是将文件、套接字或其他资源读入字节数组并将它们传递给 JVM,因此它们自己不需要反射 API。


以上是反射是针对类加载器的吗?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>