W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
java.lang.Object
|---java.lang.ClassLoader
|---|---java.security.SecureClassLoader
|---|---|---java.net.URLClassLoader
public class URLClassLoader
extends SecureClassLoader
implements Closeable
此類加載器用于從引用 JAR 文件和目錄的 URL 的搜索路徑加載類和資源。 假設(shè)任何以“/”結(jié)尾的 URL 都指向一個目錄。 否則,假定 URL 引用將根據(jù)需要打開的 JAR 文件。
創(chuàng)建 URLClassLoader 實例的線程的 AccessControlContext 將在隨后加載類和資源時使用。
默認情況下,加載的類僅被授予訪問在創(chuàng)建 URLClassLoader 時指定的 URL 的權(quán)限。
構(gòu)造函數(shù) | 描述 |
---|---|
URLClassLoader(URL[] urls) | 使用默認委托父 ClassLoader 為指定的 URL 構(gòu)造一個新的 URLClassLoader。 |
URLClassLoader(URL[] urls, ClassLoader parent) | 為給定的 URL 構(gòu)造一個新的 URLClassLoader。 |
URLClassLoader(URL[] urls, ClassLoader parent, URLStreamHandlerFactory factory) | 為指定的 URL、父類加載器和 URLStreamHandlerFactory 構(gòu)造一個新的 URLClassLoader。 |
修飾符和類型 | 方法 | 描述 |
---|---|---|
protected void | addURL(URL url) | 將指定的 URL 附加到 URL 列表以搜索類和資源。 |
void | close() | 關(guān)閉此 URLClassLoader,使其不能再用于加載此加載器定義的新類或資源。 |
protected Package | definePackage(String name, Manifest man, URL url) | 在此 ClassLoader 中按名稱定義新包。 |
protected Class<?> | findClass(String name) | 從 URL 搜索路徑中查找并加載具有指定名稱的類。 |
URL | findResource(String name) | 在 URL 搜索路徑上查找具有指定名稱的資源。 |
EnumerationURL | findResources(String name) | 返回一個 URL 枚舉,表示 URL 搜索路徑上具有指定名稱的所有資源。 |
protected PermissionCollection | getPermissions(CodeSource codesource) | 返回給定代碼源對象的權(quán)限。 |
InputStream | getResourceAsStream(String name) | 返回用于讀取指定資源的輸入流。 |
URL[] | getURLs() | 返回用于加載類和資源的 URL 的搜索路徑。 |
static URLClassLoader | newInstance(URL[] urls) | 為指定的 URL 和默認父類加載器創(chuàng)建 URLClassLoader 的新實例。 |
static URLClassLoader | newInstance(URL[] urls, ClassLoader parent) | 為指定的 URL 和父類加載器創(chuàng)建 URLClassLoader 的新實例。 |
從類 java.lang.ClassLoader 繼承的方法 |
---|
clearAssertionStatus, defineClass, defineClass, defineClass, defineClass, definePackage, findLibrary, findLoadedClass, findSystemClass, getPackage, getPackages, getParent, getResource, getResources, getSystemClassLoader, getSystemResource, getSystemResourceAsStream, getSystemResources, loadClass, loadClass, registerAsParallelCapable, resolveClass, setClassAssertionStatus, setDefaultAssertionStatus, setPackageAssertionStatus, setSigners |
從類 java.lang.Object 繼承的方法 |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
從類 java.security.SecureClassLoader 繼承的方法 |
---|
defineClass, defineClass |
public URLClassLoader(URL[] urls, ClassLoader parent)
為給定的 URL 構(gòu)造一個新的 URLClassLoader。 在第一次在指定的父類加載器中搜索之后,將按照為類和資源指定的順序搜索 URL。 假設(shè)任何以“/”結(jié)尾的 URL 都指向一個目錄。 否則,假定 URL 指向?qū)⒏鶕?jù)需要下載和打開的 JAR 文件。
如果有安全管理器,此方法首先調(diào)用安全管理器的 checkCreateClassLoader 方法,以確保允許創(chuàng)建類加載器。
參數(shù):
參數(shù)名稱 | 參數(shù)描述 |
---|---|
urls | 從中加載類和資源的 URL |
parent | 委托的父類加載器 |
Throws:
Throw名稱 | Throw描述 |
---|---|
SecurityException | 如果存在安全管理器并且其 checkCreateClassLoader 方法不允許創(chuàng)建類加載器。 |
NullPointerException | 如果網(wǎng)址為空。 |
public URLClassLoader(URL[] urls)
使用默認委托父 ClassLoader 為指定的 URL 構(gòu)造一個新的 URLClassLoader。 在第一次在父類加載器中搜索之后,將按照為類和資源指定的順序搜索 URL。 假設(shè)任何以“/”結(jié)尾的 URL 都指向一個目錄。 否則,假定 URL 指向?qū)⒏鶕?jù)需要下載和打開的 JAR 文件。
如果有安全管理器,此方法首先調(diào)用安全管理器的 checkCreateClassLoader 方法,以確保允許創(chuàng)建類加載器。
參數(shù):
參數(shù)名稱 | 參數(shù)描述 |
---|---|
urls | 從中加載類和資源的 URL |
Throws:
Throw名稱 | Throw描述 |
---|---|
SecurityException | 如果存在安全管理器并且其 checkCreateClassLoader 方法不允許創(chuàng)建類加載器。 |
NullPointerException | 如果網(wǎng)址為空。 |
public URLClassLoader(URL[] urls, ClassLoader parent, URLStreamHandlerFactory factory)
為指定的 URL、父類加載器和 URLStreamHandlerFactory 構(gòu)造一個新的 URLClassLoader。 parent 參數(shù)將用作委托的父類加載器。 factory 參數(shù)將用作流處理程序工廠,以在創(chuàng)建新的 jar URL 時獲取協(xié)議處理程序。
如果有安全管理器,此方法首先調(diào)用安全管理器的 checkCreateClassLoader 方法,以確保允許創(chuàng)建類加載器。
參數(shù):
參數(shù)名稱 | 參數(shù)描述 |
---|---|
urls | 從中加載類和資源的 URL |
parent | 委托的父類加載器 |
factory | 創(chuàng)建 URL 時使用的 URLStreamHandlerFactory |
Throws:
Throw名稱 | Throw描述 |
---|---|
SecurityException | 如果存在安全管理器并且其 checkCreateClassLoader 方法不允許創(chuàng)建類加載器。 |
NullPointerException | 如果網(wǎng)址為空。 |
public InputStream getResourceAsStream(String name)
返回用于讀取指定資源的輸入流。 如果這個加載器被關(guān)閉,那么通過這個方法打開的任何資源都將被關(guān)閉。
ClassLoader.getResource(java.lang.String) 的文檔中描述了搜索順序。
覆蓋:
類 ClassLoader 中的 getResourceAsStream
參數(shù):
參數(shù)名稱 | 參數(shù)描述 |
---|---|
name | 資源名稱 |
返回:
用于讀取資源的輸入流,如果找不到資源,則返回 null
public void close() throws IOException
關(guān)閉此 URLClassLoader,使其不能再用于加載此加載器定義的新類或資源。 由委托層次結(jié)構(gòu)中的任何此加載器的父級定義的類和資源仍然可以訪問。 此外,任何已加載的類或資源仍然可以訪問。
對于 jar: 和 file: URL,它還會關(guān)閉它打開的所有文件。 如果調(diào)用 close 方法時另一個線程正在加載一個類,則該加載的結(jié)果是未定義的。
該方法通過在內(nèi)部捕獲 IOExceptions 盡最大努力嘗試關(guān)閉所有打開的文件。 未經(jīng)檢查的異常和錯誤不會被捕獲。 在已經(jīng)關(guān)閉的加載程序上調(diào)用 close 無效。
指定者:
在接口 AutoCloseable 中關(guān)閉
指定者:
在接口Closeable中關(guān)閉
Throws:
Throw名稱 | Throw描述 |
---|---|
IOException | 如果關(guān)閉此類加載器打開的任何文件導(dǎo)致 IOException。 任何此類異常都會在內(nèi)部捕獲。 如果只有一個被抓住,那么它會被重新拋出。 如果捕獲了多個異常,則將第二個和隨后的異常添加為捕獲的第一個異常的抑制異常,然后重新拋出該異常。 |
SecurityException | 如果設(shè)置了安全管理器,并且它拒絕 RuntimePermission("closeClassLoader") |
protected void addURL(URL url)
將指定的 URL 附加到 URL 列表以搜索類和資源。
如果指定的 URL 為 null 或已在 URL 列表中,或者此加載器已關(guān)閉,則調(diào)用此方法無效。
參數(shù):
參數(shù)名稱 | 參數(shù)描述 |
---|---|
url | 要添加到 URL 搜索路徑的 URL |
public URL[] getURLs()
返回用于加載類和資源的 URL 的搜索路徑。 這包括指定給構(gòu)造函數(shù)的原始 URL 列表,以及隨后由 addURL() 方法附加的任何 URL。
返回:
用于加載類和資源的 URL 的搜索路徑。
protected Class<?> findClass(String name) throws ClassNotFoundException
從 URL 搜索路徑中查找并加載具有指定名稱的類。 任何引用 JAR 文件的 URL 都會根據(jù)需要加載和打開,直到找到該類。
覆蓋:
類 ClassLoader 中的 findClass
參數(shù):
參數(shù)名稱 | 參數(shù)描述 |
---|---|
name | 班級名稱 |
返回:
結(jié)果類
Throws:
Throw名稱 | Throw描述 |
---|---|
ClassNotFoundException | 如果找不到類,或者加載器已關(guān)閉。 |
NullPointerException | 如果名稱為空。 |
protected Package definePackage(String name, Manifest man, URL url) throws IllegalArgumentException
在此 ClassLoader 中按名稱定義新包。 指定 Manifest 中包含的屬性將用于獲取包版本和封裝信息。 對于密封包,附加 URL 指定從中加載包的代碼源 URL。
參數(shù):
參數(shù)名稱 | 參數(shù)描述 |
---|---|
name | 包名 |
man | 包含包版本和密封信息的清單 |
url | 包的代碼源 url,如果沒有,則為 null |
返回:
新定義的 Package 對象
Throws:
Throw名稱 | Throw描述 |
---|---|
IllegalArgumentException | 如果包名稱與此類加載器或其祖先之一中的現(xiàn)有包重復(fù) |
public URL findResource(String name)
在 URL 搜索路徑上查找具有指定名稱的資源。
覆蓋:
類 ClassLoader 中的 findResource
參數(shù):
參數(shù)名稱 | 參數(shù)描述 |
---|---|
name | 資源的名稱 |
返回:
資源的 URL,如果找不到資源,或者加載器已關(guān)閉,則返回 null。
public EnumerationURL findResources(String name) throws IOException
返回一個 URL 枚舉,表示 URL 搜索路徑上具有指定名稱的所有資源。
覆蓋:
類 ClassLoader 中的 findResources
參數(shù):
參數(shù)名稱 | 參數(shù)描述 |
---|---|
name | 資源名稱 |
返回:
URL 的枚舉 如果加載程序關(guān)閉,則枚舉將為空。
Throws:
Throw名稱 | Throw描述 |
---|---|
IOException | 如果發(fā)生 I/O 異常 |
protected PermissionCollection getPermissions(CodeSource codesource)
返回給定代碼源對象的權(quán)限。 該方法的實現(xiàn)首先調(diào)用super.getPermissions,然后根據(jù)codesource的URL添加權(quán)限。
如果此 URL 的協(xié)議是“jar”,則授予的權(quán)限基于 Jar 文件的 URL 所需的權(quán)限。
如果協(xié)議是“文件”并且存在權(quán)限組件,則可以授予連接到該權(quán)限并接受來自該權(quán)限的連接的權(quán)限。 如果協(xié)議是“文件”并且路徑指定了文件,則授予讀取該文件的權(quán)限。 如果協(xié)議是“文件”并且路徑是目錄,則授予讀取所有文件和(遞歸)該目錄中包含的所有文件和子目錄的權(quán)限。
如果協(xié)議不是“文件”,則授予連接和接受來自 URL 主機的連接的權(quán)限。
覆蓋:
類 SecureClassLoader 中的 getPermissions
參數(shù):
參數(shù)名稱 | 參數(shù)描述 |
---|---|
codesource | the codesource |
返回:
授予代碼源的權(quán)限
Throws:
Throw名稱 | Throw描述 |
---|---|
NullPointerException | 如果代碼源為空。 |
public static URLClassLoader newInstance(URL[] urls, ClassLoader parent)
為指定的 URL 和父類加載器創(chuàng)建 URLClassLoader 的新實例。 如果安裝了安全管理器,該方法返回的 URLClassLoader 的 loadClass 方法會在加載類之前調(diào)用 SecurityManager.checkPackageAccess 方法。
參數(shù):
參數(shù)名稱 | 參數(shù)描述 |
---|---|
urls | 用于搜索類和資源的 URL |
parent | 委托的父類加載器 |
返回:
生成的類加載器
Throws:
Throw名稱 | Throw描述 |
---|---|
NullPointerException | 如果網(wǎng)址為空。 |
public static URLClassLoader newInstance(URL[] urls)
為指定的 URL 和默認父類加載器創(chuàng)建 URLClassLoader 的新實例。 如果安裝了安全管理器,則此方法返回的 URLClassLoader 的 loadClass 方法將在加載類之前調(diào)用 SecurityManager.checkPackageAccess。
參數(shù):
參數(shù)名稱 | 參數(shù)描述 |
---|---|
urls | 用于搜索類和資源的 URL |
返回:
生成的類加載器
Throws:
Throw名稱 | Throw描述 |
---|---|
NullPointerException | 如果網(wǎng)址為空。 |
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: