外部java库(JAR)实际上是如何工作的?

外部java库(JAR)实际上是如何工作的?,java,jar,libraries,Java,Jar,Libraries,很多时候,在Java中,我们希望使用一些以JAR形式提供给我们的功能(例如一些外部库)。我经常注意到JAR包含.class文件 由于.class文件表示可供JVM使用的编译字节码,因此我的问题如下: 为什么.class文件是我们使用外部库所需要的全部?可能某个JAR包含名为:Person.class的类文件。当JAR文件公开的只是一个.class文件时,我如何在代码中引用这个类。源代码(.java文件)不是很重要,需要什么吗?正如我可以在同一个包中有两个类一样,我可以从另一个类中引用一个类,因为

很多时候,在Java中,我们希望使用一些以JAR形式提供给我们的功能(例如一些外部库)。我经常注意到JAR包含.class文件

由于.class文件表示可供JVM使用的编译字节码,因此我的问题如下: 为什么.class文件是我们使用外部库所需要的全部?可能某个JAR包含名为:Person.class的类文件。当JAR文件公开的只是一个.class文件时,我如何在代码中引用这个类。源代码(.java文件)不是很重要,需要什么吗?正如我可以在同一个包中有两个类一样,我可以从另一个类中引用一个类,因为两个.java文件(不是.class文件)在相同的范围内(仅举一个例子)


如果这是一个愚蠢的问题,请原谅,但我真的很想理解这一点。

即使您在
.java
文件中编写源代码,它们最终也会被编译成
.class
文件,存储易于解释的字节码。在项目中使用jar文件时,这些jar文件中的所有类文件都包含在类路径中,因此您可以使用它们


因此,在JAR包中,
.class
文件足以用作依赖项。

即使您在
.java
文件中编写源代码,它们最终也会被编译成
.class
文件,这些文件存储易于解释的字节码。在项目中使用jar文件时,这些jar文件中的所有类文件都包含在类路径中,因此您可以使用它们


因此,在JAR包中,
.class
文件足以用作依赖项。

Java编译器将人类可以理解的Java代码放入
.class
文件中,Java虚拟机(JVM)可以理解这些文件。然后JVM获取
.class
文件并在您的机器上运行它们


.jar
文件实际上是打包的
.class
文件的集合(在引擎盖下,它实际上只不过是伪装的
.zip
)。当您将
.jar
添加到类路径中时,您告诉JVM,当它需要一个特定类时,它应该再找一个地方。

Java编译器将人类可以理解的Java代码放入
.class
文件中,这是Java虚拟机(JVM)所需要的我能理解。然后JVM获取
.class
文件并在您的机器上运行它们


.jar
文件实际上是打包的
.class
文件的集合(在引擎盖下,它实际上只不过是伪装的
.zip
)。当你在类路径上添加一个
.jar
时,你告诉JVM当它需要一个特定的类时,它应该再找一个地方。

我不确定我是否完全理解你的问题,但是jar只是编译的Java代码,这意味着代码的语义/逻辑等没有改变。您需要能够访问要使用的java代码的函数/类等,否则您将无法获得使用JAR的任何优势


JAR的一个优点是,这些库的源代码已经编译好了。由于这些.class文件是编译过的.java文件,因此访问在.java文件中编写的函数只需这些文件。

我不确定是否完全理解您的问题,但JAR只是编译过的java代码,这意味着代码的语义/逻辑等没有改变。您需要能够访问要使用的java代码的函数/类等,否则您将无法获得使用JAR的任何优势


JAR的一个优点是,这些库的源代码已经编译好了。由于这些.class文件都是编译后的.java文件,因此访问在.java文件中编写的函数只需要这些文件。

我不确定您的问题是否指向如何从jar中检索信息,以便让jvm知道哪些相关文件以依赖形式可用。也许清单文件就是您正在寻找的,我不确定您的问题是否指向如何从jar检索信息,以让jvm知道哪些相关文件是以依赖形式提供的。也许清单文件就是您正在寻找的,所以您是说编译器从已经编译的.java文件(即.class文件)中引用和调用类/函数没有问题?这就是为什么我可以轻松地将import语句添加到外部库类中,并使用jar的原因。源代码被编译成.class文件,函数等可以通过包含/导入编译后的java代码在其他代码中使用。那么你是说编译器从已经编译的.java文件(即类文件)中引用和调用类/函数没有问题?这就是为什么我可以轻松地将import语句添加到外部库类中,并使用jar的原因。源代码被编译成.class文件,函数等可以通过包含/导入编译的java代码在其他代码中使用。这是否意味着编译器可以从已编译的.java文件(即类文件)中引用和调用类/函数?这就是为什么我可以轻松地将导入语句(例如)添加到外部库类中,并使用JAR?这是否意味着编译器可以从已经编译的.java文件(即.class文件)中引用和调用类/函数?这就是为什么我可以轻松地将导入语句(例如)添加到外部库类并使用JAR的原因?