簡體   English   中英

外部Java庫(罐子)實際上如何工作?

[英]How do external java libraries(jars) actually work?

在Java中,很多時候我們想使用以JAR形式(例如一些外部庫)提供給我們的某些功能。 我經常注意到JAR包含.class文件。

由於.class文件表示已准備好供JVM使用的已編譯字節碼,因此我的問題是:.class文件如何才是我們使用外部庫所需的全部? 也許某個JAR包含名為:Person.class的類文件。 當JAR文件公開的全部是.class文件時,如何在我的代碼中引用此類。 源代碼(.java文件)重要和需要的不是嗎? 以相同的方式,我可以在同一個包中包含兩個類,因此我可以互相引用一個類,因為兩個.java文件 (不是.class文件)在同一范圍內(僅舉一個例子) 。

如果這是一個愚蠢的問題,請原諒,但是我真的很想理解這一點。

即使您在.java文件中編寫源代碼,它們也最終會被編譯成.class文件,這些文件存儲了可以輕松解釋的字節碼。 在項目中使用jar文件時,這些jar文件中的所有類文件都包含在類路徑中,因此使您可以使用它們。

因此,在JAR程序包中, .class文件足以用作依賴項。

Java編譯器將人類可以理解的Java代碼帶入.class文件,而Java虛擬機(JVM)可以理解.class文件。 然后,JVM將獲取.class文件並在您的計算機上運行它們。

.jar文件實際上是打包在一起的.class文件的集合(實際上,它實際上只是變相的.zip而已)。 當您在類路徑上添加.jar ,是在告訴JVM它是在需要特定類時應該查找的另一個位置。

我不確定是否能完全解決您的問題,但是JAR只是經過編譯的javacode,這意味着代碼的語義/邏輯等未更改。 您需要能夠訪問要使用的Java代碼的函數/類等,因為否則您將無法獲得使用JAR的任何好處。

JAR的優點之一是這些庫的源代碼已被編譯。 由於這些.class文件是已編譯的.java文件,因此您只需訪問它們即可訪問.java文件中編寫的功能。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM