类加载:编译时间或运行时

时间:2013-07-22 14:53:24

标签: java runtime

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

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

4 个答案:

答案 0 :(得分:1)

没有。 JLS解释了加载和链接是如何运行的。可以抛出任何二进制兼容的类修订来代替现有类。

使用对其他类的符号引用编译类,而不是这些类的代码。

然而,某些非JVM编译器(如GCJ类)可以提前编译成一个可执行文件。

答案 1 :(得分:1)

在运行时加载类以执行其代码。

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

答案 2 :(得分:0)

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

不同之处可能是,如果JVM启动时ClassLoader加载了一个类,或者如果你在执行期间动态地加载了一个类,那么它们就是同一枚奖牌的两面。

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

答案 3 :(得分:0)

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