URLClassLoader
Java 原生JDK裡面為ClassLoader提供了一個URLClassLoader實現類,通過UML圖我們可以看出,它是ExtClassLoader和 AppClassLoader的父類,它功能強大,它既可以從本地檔案系統來獲取二進位制檔案去載入,也可以從遠端主機 獲取二進位制檔案去載入。
該類載入器用於指向JAR檔案和目錄的URL 的搜尋路徑載入類和資源。這裡假定任何以 / 結束的URL都是指向該目錄的,如果不是以該字元結束的,則會認為指向一個根據需要開啟的JAR檔案
構造方法摘要 |
---|
URLClassLoader(URL[] urls) 使用預設的委託父 ClassLoader 為指定的 URL 構造一個新 URLClassLoader。 |
URLClassLoader(URL[] urls, ClassLoader parent) 為給定的 URL 構造新 URLClassLoader。 |
URLClassLoader(URL[] urls, ClassLoader parent, URLStreamHandlerFactory factory) 為指定的 URL、父類載入器和 URLStreamHandlerFactory 建立新 URLClassLoader。 |
方法摘要 |
---|
protected void addURL(URL url) 將指定的 URL 新增到 URL 列表中,以便搜尋類和資源。 |
protected Package definePackage(String name, Manifest man, URL url) 用該 ClassLoader 中的名稱定義一個新包。 |
protected Class<?> findClass(String name) 通過 URL 搜尋路徑查詢並載入具有指定名稱的類。 |
URL findResource(String name) 在 URL 搜尋路徑中查詢具有指定名稱的資源。 |
Enumeration<URL> findResources(String name) 返回表示 URL 搜尋路徑中具有指定名稱的所有資源的 URL 列舉。 |
protected PermissionCollection getPermissions(CodeSource codesource) 返回給定 codesource 物件的許可權。 |
URL[] getURLs() 返回用於載入類和資源的 URL 搜尋路徑。 |
static URLClassLoader newInstance(URL[] urls) 為 指定的 URL 和預設的父類載入器建立新 URLClassLoader 例項。 |
static URLClassLoader newInstance(URL[] urls, ClassLoader parent) 為指定的 URL 和父類載入器建立新 URLClassLoader 例項。 |
從類 java.security.SecureClassLoader 繼承的方法 |
---|
defineClass, defineClass |
構造方法詳細資訊
URLClassLoader public URLClassLoader(URL[] urls, ClassLoader parent)
為給定的 URL 構造新 URLClassLoader。首先在指定的父類載入器中搜尋 URL,然後按照為類和資源指定的順序搜尋 URL。這裡假定任何以 / 結束的 URL 都是指向目錄的。如果不是以該字元結束,則認為該 URL 指向一個將根據需要下載和開啟的 JAR 檔案。
如果有安全管理器,該方法首先呼叫安全管理器的 checkCreateClassLoader 方法以確保允許建立類載入器。
引數:
urls – 從其位置載入類和資源的 UR
parent – 用於委託的父類載入器
丟擲:
SecurityException – 如果存在安全管理器,且其 checkCreateClassLoader 方法不允許建立類載入器。
另請參見:
SecurityManager.checkCreateClassLoader()
public URLClassLoader(URL[] urls)
使用預設的委託父 ClassLoader 為指定的 URL 構造一個新 URLClassLoader。首先在父類載入器中搜尋 URL,然後按照為類和資源指定的順序搜尋 URL。這裡假定任何以 / 結束的 URL 都是指向目錄的。如果不是以該字元結束,則認為該 URL 指向一個將根據需要下載和開啟的 JAR 檔案。
如果有安全管理器,該方法首先呼叫安全管理器的 checkCreateClassLoader 方法以確保允許建立類載入器。
引數:
urls – 從其位置載入類和資源的 URL
丟擲:
SecurityException – 如果安全管理器存在並且其 checkCreateClassLoader 方法不允許建立類載入器。
另請參見:
SecurityManager.checkCreateClassLoader()
public URLClassLoader(URL[] urls, ClassLoader parent, URLStreamHandlerFactory factory)
為指定的 URL、父類載入器和 URLStreamHandlerFactory 建立新 URLClassLoader。該父引數將充當委託的父類載入器。該工廠引數將充當建立新 jar URL 時獲取協議處理程式的流處理程式工廠。
如果有安全管理器,該方法首先呼叫安全管理器的 checkCreateClassLoader 方法以確保允許建立類載入器。
引數:
urls – 從其位置載入類和資源的 URL
parent – 用於委託的父類載入器
factory – 建立 URL 時使用的 URLStreamHandlerFactory
丟擲:
SecurityException – 如果安全管理器存在並且其 checkCreateClassLoader 方法不允許建立類載入器。
另請參見:
SecurityManager.checkCreateClassLoader()
方法詳細資訊
addURL
protected void addURL(URL url)
將指定的 URL 新增到 URL 列表中,以便搜尋類和資源。
引數:
url – 將新增到 URL 搜尋路徑中的 URL
getURLs
public URL[] getURLs()
返回用於載入類和資源的 URL 搜尋路徑。這包括為構造方法指定的原始 URL 列表,以及由 addURL() 方法後續新增的 URL。
返回:
用於載入類和資源的 URL 搜尋路徑。
findClass
protected Class<?> findClass(String name) throws ClassNotFoundException
通過 URL 搜尋路徑查詢並載入具有指定名稱的類。只有在找到該類後,才能根據需要載入和開啟任何指向 JAR 檔案的 URL。
覆蓋:
類 ClassLoader 中的 findClass
引數:
name – 類的名稱
返回:
結果類
丟擲:
ClassNotFoundException – 如果無法找到該類
definePackage
protected Package definePackage(String name, Manifest man, URL url)
throws IllegalArgumentException
用該 ClassLoader 中的名稱定義一個新包。該指定的 Manifest 中包含的屬性將用於包含包版本和密封資訊。對於密封的包,此附加 URL 從載入該包的 URL 指定程式碼源 URL。
引數:
name – 包的名稱
man – 包含包的版本和密封資訊的 Manifest
url – 包的程式碼源 url,或者如果沒有,則為 null
返回:
新定義的 Package 物件
丟擲:
IllegalArgumentException – 如果包的名稱與該類載入器或其祖先之一中現有的包重名
findResource
public URL findResource(String name)
在 URL 搜尋路徑中查詢具有指定名稱的資源。
覆蓋:
類 ClassLoader 中的 findResource
引數:
name – 資源的名稱
返回:
資源的 URL,或者如果無法找到該資源,則返回 null。
findResources
public Enumeration<URL> findResources(String name)
throws IOException
返回表示 URL 搜尋路徑中具有指定名稱的所有資源的 URL 列舉。
覆蓋:
類 ClassLoader 中的 findResources
引數:
name – 資源名稱
返回:
URL 的列舉
丟擲:
IOException – 如果發生 I/O 異常
getPermissions
protected PermissionCollection getPermissions(CodeSource codesource)
返回給定 codesource 物件的許可權。該方法的實現首先呼叫 super.getPermissions,然後基於 codesource 的 URL 新增許可權。
如果此 URL 的協議為 “jar”,那麼授予的許可權將基於 Jar 檔案 URL 所請求的許可權。
如果協議為 “file”,並且路徑指定了某個檔案,則要授予對該檔案的讀許可權。如果協議為 “file”,並且路徑是一個目錄,則要授予該目錄中的所有檔案及其(遞迴)子目錄中包含的所有檔案讀許可權。
如果協議不是 “file”,則允許連線到和接收來自 URL 主機的連線。
覆蓋:
類 SecureClassLoader 中的 getPermissions
引數:
codesource – codesource
返回:
授予 codesource 的許可權
newInstance
public static URLClassLoader newInstance(URL[] urls, ClassLoader parent)
為指定的 URL 和父類載入器建立新 URLClassLoader 例項。如果安裝了安全管理器,該方法返回的 URLClassLoader 的 loadClass 方法將在載入該類之前呼叫 SecurityManager.checkPackageAccess 方法。
引數:
urls – 用於搜尋類和資源的 URL
parent – 用於委託的父類載入器
返回:
結果類載入器
newInstance
public static URLClassLoader newInstance(URL[] urls)
為指定的 URL 和預設的父類載入器建立新 URLClassLoader 例項。如果安裝了安全管理器,該方法返回的 URLClassLoader 的 loadClass 方法將在載入該類之前呼叫 SecurityManager.checkPackageAccess。
引數:
urls – 用於搜尋類和資源的 URL
返回:
結果類載入器
(adsbygoogle = window.adsbygoogle || []).push({});
function googleAdJSAtOnload() {
var element = document.createElement(“script”);
element.src = “//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js”;
element.async = true;
document.body.appendChild(element);
}
if (window.addEventListener) {
window.addEventListener(“load”, googleAdJSAtOnload, false);
} else if (window.attachEvent) {
window.attachEvent(“onload”, googleAdJSAtOnload);
} else {
window.onload = googleAdJSAtOnload;
}
写评论
很抱歉,必須登入網站才能發佈留言。