在Java中很多时候我们想要使用以JAR形式提供给我们的一些功能(例如一些外部库)。我经常注意到JAR包含.class文件。
由于.class文件表示已准备好供JVM使用的已编译字节码,我的问题如下: 怎么样.class文件是我们使用外部库所需的全部内容?也许某个JAR包含名为Person.class的类文件。当JAR文件公开的所有内容都是.class文件时,如何在我的代码中引用此类。不是源代码(.java文件)重要的是什么以及需要什么?就像我可以在同一个包中有两个类一样,我能够从另一个引用一个类,因为两个.java文件(不是.class文件)在相同的范围(仅举一个例子)。
对不起,如果这是一个愚蠢的问题,但我真的想了解这一点。
答案 0 :(得分:3)
即使您在.java
文件中编写源代码,它们最终也会编译成.class
个文件,这些文件存储可以轻松解释的字节码。在项目中使用jar文件时,这些jar文件中的所有类文件都包含在类路径中,因此可以使用它们。
因此,在JAR包中,.class
个文件足以用作依赖项。
答案 1 :(得分:1)
Java编译器将您的Java代码(人类可以理解的东西)转换为.class
文件,这是Java虚拟机(JVM)可以理解的。然后,JVM获取.class
个文件并在您的计算机上运行它们。
.jar
文件实际上是打包的.class
个文件的集合(在幕后,它实际上只是伪装成.zip
)。当您在类路径中添加.jar
时,您告诉JVM,当它需要特定类时,它应该是它应该看的另一个地方。
答案 2 :(得分:1)
我不确定我是否完全得到了您的问题,但JAR只是编译为javacode,这意味着代码的语义/逻辑等没有被更改。您需要能够访问要使用的Java代码的函数/类等,否则您将无法获得使用JAR的任何优势。
JAR的一个优点是,已经编译了这些库的源代码。由于这些.class文件是编译.java文件,因此您只需访问.java文件中编写的函数。