是在编译时还是运行时加载java类?我知道您可以使用自己的类加载器动态加载java类或调用Class.forName("fully qualified name of java file")
。
但如果我没有使用上述任何技术,那么这意味着Java类是在编译时加载的吗?
答案 0 :(得分:1)
没有。 JLS解释了加载和链接是如何运行的。可以抛出任何二进制兼容的类修订来代替现有类。
使用对其他类的符号引用编译类,而不是这些类的代码。
然而,某些非JVM编译器(如GCJ类)可以提前编译成一个可执行文件。
答案 1 :(得分:1)
在运行时加载类以执行其代码。
在编译时加载类以使用类安全性来检查代码 无论何时编写使用类的代码(例如,在其上调用方法),编译器都需要加载该类以理解您的代码(例如,检查方法或基类型)
答案 2 :(得分:0)
在编译时没有加载任何内容。在编译时,类只是从源代码生成的。
不同之处可能是,如果JVM启动时ClassLoader
加载了一个类,或者如果你在执行期间动态地加载了一个类,那么它们就是同一枚奖牌的两面。
在这两种情况下,它们都是动态加载的,但在前者中,只要JVM启动就会完成。
答案 3 :(得分:0)
正如许多其他人所说,除非您使用AOT编译器允许它们在非JVM环境中运行,否则将在运行时加载类。如果您想要阅读有关Java虚拟机如何启动的所有详细信息,请初始化并加载第一个后续类,您可以查看Java SE 7 specifications。