鴻蒙OS URLClassLoader

2022-06-14 17:26 更新

URLClassLoader

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ù)摘要

構(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。

方法總結(jié)

修飾符和類型 方法 描述
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

構(gòu)造函數(shù)詳細信息

URLClassLoader

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)址為空。

URLClassLoader

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)址為空。

URLClassLoader

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)址為空。

方法詳情

getResourceAsStream

public InputStream getResourceAsStream(String name)

返回用于讀取指定資源的輸入流。 如果這個加載器被關(guān)閉,那么通過這個方法打開的任何資源都將被關(guān)閉。

ClassLoader.getResource(java.lang.String) 的文檔中描述了搜索順序。

覆蓋:

類 ClassLoader 中的 getResourceAsStream

參數(shù):

參數(shù)名稱 參數(shù)描述
name 資源名稱

返回:

用于讀取資源的輸入流,如果找不到資源,則返回 null

close

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")

addURL

protected void addURL(URL url)

將指定的 URL 附加到 URL 列表以搜索類和資源。

如果指定的 URL 為 null 或已在 URL 列表中,或者此加載器已關(guān)閉,則調(diào)用此方法無效。

參數(shù):

參數(shù)名稱 參數(shù)描述
url 要添加到 URL 搜索路徑的 URL

getURLs

public URL[] getURLs()

返回用于加載類和資源的 URL 的搜索路徑。 這包括指定給構(gòu)造函數(shù)的原始 URL 列表,以及隨后由 addURL() 方法附加的任何 URL。

返回:

用于加載類和資源的 URL 的搜索路徑。

findClass

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 如果名稱為空。

definePackage

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ù)

findResource

public URL findResource(String name)

在 URL 搜索路徑上查找具有指定名稱的資源。

覆蓋:

類 ClassLoader 中的 findResource

參數(shù):

參數(shù)名稱 參數(shù)描述
name 資源的名稱

返回:

資源的 URL,如果找不到資源,或者加載器已關(guān)閉,則返回 null。

findResources

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 異常

getPermissions

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 如果代碼源為空。

newInstance

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)址為空。

newInstance

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)址為空。
以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號