我不明白的是Java如何知道引用的jar的方法?如果它只是为了运行而编译并且您无法阅读它,我看不出您仍然如何看到这些方法。我的问题的一个例子是,如果你使用一种名为“ShowABox”的方法制作了一个让一个盒子出现在屏幕上的罐子。然后将它添加到另一个 Java 项目中。那么IDE如何知道jar已经编译后存在一个名为“ShowABox”的方法呢?您无法在 IDE 中读取类文件,为什么它可以读取方法?
5 回答
由于这个原因,您所引用的所有信息实际上都存储在类文件中。
至于看class文件里的代码,当然可以,也证明信息被保留了。看看Java 反编译器。请注意,如果您想直接在那里看到它,您甚至可以将其构建到 eclipse 中。
编译的类包含字节码。方法仍然有它们的真实名称,但它们的代码编译为 JVM 指令。
您可以阅读wiki 上的 java 类文件格式规范,阅读“常量池”段落,方法名称(作为其他类信息)包含在常量池中。
只需尝试在文本编辑器中打开一些 .class 文件,您就会在其中找到方法名称。(.class 文件通常在 project/bin 文件夹中,或者打开 .jar 作为存档并从那里获取 .class 文件)
JAR 只不过是压缩在单个文件中的所有类文件,并附有清单。每个类文件都完整地描述了它的公共接口。
JAR 文件具有非常特定的格式 - 请参阅http://en.wikipedia.org/wiki/JAR_(file_format) - 它们包含类文件,它们也具有非常特定的格式 - 请参阅http://en.wikipedia .org/wiki/Java_class_file。这种格式除了为 Java 虚拟机提供执行代码所需的信息外,还为 IDE 和编译器提供查找类、接口、字段、方法等所需的信息。
jar 只不过是一个包含 Java 编译的 .class 二进制文件的存档,压缩成一个单一文件。它的内容是以目录结构组织的编译后的二进制文件。因此,您可以将其视为包含文件但压缩为单个存档的目录(就像 zip 文件一样)。jar 本身不是二进制文件(“自从 jar 已经编译后就存在”)——它不会自己编译,而是包含已编译的元素。