外部java库(JAR)实际上是如何工作的?
很多时候,在Java中,我们希望使用一些以JAR形式提供给我们的功能(例如一些外部库)。我经常注意到JAR包含.class文件 由于.class文件表示可供JVM使用的编译字节码,因此我的问题如下: 为什么.class文件是我们使用外部库所需要的全部?可能某个JAR包含名为:Person.class的类文件。当JAR文件公开的只是一个.class文件时,我如何在代码中引用这个类。源代码(.java文件)不是很重要,需要什么吗?正如我可以在同一个包中有两个类一样,我可以从另一个类中引用一个类,因为两个.java文件(不是.class文件)在相同的范围内(仅举一个例子)外部java库(JAR)实际上是如何工作的?,java,jar,libraries,Java,Jar,Libraries,很多时候,在Java中,我们希望使用一些以JAR形式提供给我们的功能(例如一些外部库)。我经常注意到JAR包含.class文件 由于.class文件表示可供JVM使用的编译字节码,因此我的问题如下: 为什么.class文件是我们使用外部库所需要的全部?可能某个JAR包含名为:Person.class的类文件。当JAR文件公开的只是一个.class文件时,我如何在代码中引用这个类。源代码(.java文件)不是很重要,需要什么吗?正如我可以在同一个包中有两个类一样,我可以从另一个类中引用一个类,因为
如果这是一个愚蠢的问题,请原谅,但我真的很想理解这一点。即使您在
.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的原因?