我想了解Java链接器是如何工作的,具体来说,它是按照什么顺序将类、接口、包、方法等组合成JVM可执行格式的。我在这里找到了一些信息(链接),但没有太多关于链接顺序的信息。
我想了解Java链接器是如何工作的,具体来说,它是按照什么顺序将类、接口、包、方法等组合成JVM可执行格式的。我在这里找到了一些信息(链接),但没有太多关于链接顺序的信息。
Java并没有所谓的“链接器”。但是,有一个类加载器的概念。它可以从“某处”获取Java字节码数组,创建一个类的内部表示,并将其与new
等一起使用。
在这种情况下,接口只是特殊的类。当类被加载时,方法和字段就可以使用了。
Error
实例的确切点可能有所不同。Java在链接方面与C不同。主要单元是类定义。类引用与其定义的匹配很多情况下发生在运行时。因此,您可以针对一个库的一个版本编译一个类,并在运行时提供另一个版本。如果相关的签名匹配,则一切都没问题。在编译时有一些常量内联,但也仅限于此。
https://docs.oracle.com/javase/specs/jvms/se7/html/jvms-5.html#jvms-5.4
链接是ClassLoader执行的三项活动之一。它包括验证、准备和(可选)解析。
验证:它确保.class文件的正确性,即检查该文件是否由有效的编译器正确格式化和生成。如果验证失败,我们会得到运行时异常java.lang.VerifyError。
准备:JVM为类变量分配内存并将内存初始化为默认值。
解析:它是用直接引用替换类型中的符号引用的过程。这是通过搜索方法区来定位所引用的实体完成的。