Java如何知道外部jar的方法?

Java如何知道外部jar的方法?,java,methods,jar,external,Java,Methods,Jar,External,我不明白的是Java如何知道被引用的jar的方法?如果它只是为了运行而编译的,而您无法读取它,那么我看不出您如何仍然可以看到这些方法。我的问题的一个例子是,如果您使用一个名为 “ShowABox”。然后将其添加到另一个Java项目中。那么IDE如何知道一个方法调用了 “ShowABox”是否存在,因为jar已编译?您无法在IDE中读取类文件,那么为什么它可以读取方法呢?JAR只不过是将所有类文件压缩到一个附加了清单的文件中。每个类文件都完整地描述了它的公共接口。正是由于这个原因,您所引用的所有信

我不明白的是Java如何知道被引用的jar的方法?如果它只是为了运行而编译的,而您无法读取它,那么我看不出您如何仍然可以看到这些方法。我的问题的一个例子是,如果您使用一个名为 “ShowABox”。然后将其添加到另一个Java项目中。那么IDE如何知道一个方法调用了
“ShowABox”是否存在,因为jar已编译?您无法在IDE中读取类文件,那么为什么它可以读取方法呢?

JAR只不过是将所有类文件压缩到一个附加了清单的文件中。每个类文件都完整地描述了它的公共接口。

正是由于这个原因,您所引用的所有信息实际上都存储在类文件中


至于在类文件中查看代码,您当然可以这样做,这也将证明信息是保留的。看一看。注意,如果您想直接在eclipse中看到它,您甚至可以将其构建到eclipse中。

JAR文件有一种非常特定的格式—请参阅—它们包含类文件,这些类文件也有一种非常特定的格式—请参阅。这种格式除了向Java虚拟机提供执行代码所需的信息外,还向IDE和编译器提供查找类、接口、字段和方法所需的信息,等等。

jar只不过是一个包含Java编译的.class二进制文件的归档文件,这些二进制文件被压缩成一个文件。它的内容是以目录结构组织的编译二进制文件。因此,您可以将其视为一个包含文件的目录,但压缩到单个存档中(就像zip文件一样)。jar本身不是二进制文件(“因为jar已经编译过了而存在”)——它本身不会被编译,而是包含编译过的元素。

编译过的类包含字节码。方法仍然有它们的真实名称,但是它们的代码被编译成JVM指令

您可以阅读,阅读“常量池”段落,方法名称(如其他类信息)包含在常量池中

只要尝试在文本编辑器中打开一些.class文件,就会在那里找到方法名称。(.class文件通常位于project/bin文件夹中,或者作为归档文件打开.jar并从中获取.class文件)