繁体   English   中英

类加载:编译时或运行时

[英]Class Loading: Compile time or Runtime

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

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

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

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

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

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

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

在编译时,不会加载任何内容。 在编译时,类只是从源生成的。

不同之处可能是在JVM通电时是由ClassLoader加载的ClassLoader ,还是在执行过程中动态地进行操作,但是它们是同一枚勋章的两个方面。

在这两种情况下,它们都是动态加载的,但是在前一种情况下,JVM启动后就完成了。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM