1

java 类是在编译时还是运行时加载的?我知道您可以使用自己的类加载器或调用动态加载 java 类Class.forName("fully qualified name of java file")

但是,如果我没有使用上述任何技术,那么这是否意味着 Java 类是在编译时加载的?

4

4 回答 4

2

不,JLS解释了加载和链接是如何运行的。类的任何二进制兼容版本都可以代替现有类。

一个类是用对其他类的符号引用而不是那些类的代码来编译的。

但是,对于某些非 JVM 编译器,例如 GCJ 类可以提前编译成一个可执行文件。

于 2013-07-22T14:55:10.403 回答
1

类在运行时加载以执行它们的代码。

类在编译时加载,以使用类检查代码的类型安全性。
每当您编写使用类的代码(例如,在其上调用方法)时,编译器都需要加载该类以理解您的代码(例如,检查方法或基类型)

于 2013-07-22T14:57:16.747 回答
0

在编译时没有加载任何内容。在编译时,类只是从源代码生成的。

不同之处可能是一个类是ClassLoader在 JVM 启动时加载的,还是在执行期间动态加载的,但它们是同一块奖牌的两侧。

在这两种情况下,它们都是动态加载的,但在前者中,这是在 JVM 启动时完成的。

于 2013-07-22T14:54:58.003 回答
0

正如许多其他人所说,类是在运行时加载的,除非您使用 AOT 编译器来允许它们在非 JVM 环境中运行。如果您想阅读有关 Java 虚拟机如何启动、初始化和加载第一个类以及后续类的所有详细信息,您可以查看Java SE 7 规范

于 2013-07-22T15:07:56.807 回答