繁体   English   中英

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

[英]How does Java know the methods of an external jar?

我不明白的是Java如何知道被引用的jar的方法? 如果它只是为了运行而编译的,而您看不懂,那么我将看不到如何看到这些方法。 我的问题的一个示例是,例如,是否使用称为“ ShowABox”的方法制作了一个使盒子在屏幕上显示的罐子。 然后将其添加到另一个Java项目中。 那么,由于该jar已被编译,IDE如何知道存在一个名为“ ShowABox”的方法? 您无法在IDE中读取类文件,那么为什么它可以读取方法?

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

至于在类文件中查看代码,您当然可以这样做,并且还将证明该信息已保留。 看看Java Decompiler 请注意,如果您想直接在eclipse中看到它,甚至可以将其构建到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已被编译,所以存在”)-它本身不会被编译,而是包含已编译的元素。

暂无
暂无

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

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