2011-01-26 59 views
15

說我有JCIFS-1.3.14.jar在我的lib文件夾中,我有一個從庫中導入和使用的類象類:從jar中導入java庫類時,這是否被認爲是靜態鏈接?或動態?

import jcifs.smb.*; 
NtlmPasswordAuthentication auth = new NtlmPasswordAuthentication(domain, 
                   user, 
                   pass); 
SmbFile file = new SmbFile(path, auth); 
// do some operations with the file here 

當使用庫以這種方式是被認爲是:A)靜態鏈接或B)動態鏈接或C)別的東西?

+1

都不是,它被認爲是一個依賴 – 2011-01-26 14:24:57

+2

我認爲它可以爲一些許可證。我參與了一個案例,其中一個庫是LGPL,因此調用者動態鏈接以避免病毒許可證 - 靜態鏈接會導致他們的代碼符合LGPL – 2011-01-26 14:31:42

+0

,因爲java會動態執行LGPL許可證庫,可用於商業產品沒有強制呼叫代碼是LGPL? – 2011-01-26 14:33:33

回答

7

Java中不存在靜態和動態一樣的C++。所有的類在被引用時都會被加載到JVM中,所以你會認爲Java中的所有導入(包括反射)都是動態的。

是的,那*因爲它引用了該包中的所有類而不正確。

3

那麼,你不會從庫中編譯代碼到你的java類。您的編譯類通過名稱引用其他庫中的類。當需要時,類將由類加載器加載。它更類似於動態鏈接。

從許可角度來看 - f.g. LGPL許可證,它應該被視爲動態鏈接。在這種情況下,我從來沒有聽說過任何法律程序(儘管我已經在尋找它),但是它是非常值得推薦的,我很期待它,因爲許多開發人員對此有點擔心。

相關問題