- 所有已实现的接口:
-
Closeable
,AutoCloseable
- 直接已知的子类:
-
MLet
jar:
方案URL(参见JarURLConnection
)都被假定为引用JAR文件。任何以'/'结尾的file:
方案URL都被假定为引用目录。否则,URL被假定为引用将根据需要打开的JAR文件。
该类加载器支持从给定URL引用的多版本 JAR文件的内容加载类和资源。
创建URLClassLoader实例的线程的AccessControlContext将在随后加载类和资源时使用。
默认情况下,加载的类仅被授予访问创建URLClassLoader时指定的URL的权限。
- 自 JDK 版本:
- 1.2
-
Constructor Summary
ConstructorDescriptionURLClassLoader
(String name, URL[] urls, ClassLoader parent) 构造一个为指定URLs创建新的命名URLClassLoader
。URLClassLoader
(String name, URL[] urls, ClassLoader parent, URLStreamHandlerFactory factory) 构造一个为指定URLs、父类加载器和URLStreamHandlerFactory创建新的命名URLClassLoader
。URLClassLoader
(URL[] urls) 使用默认委派父ClassLoader
为指定URLs创建新的URLClassLoader。URLClassLoader
(URL[] urls, ClassLoader parent) 为给定URLs创建新的URLClassLoader。URLClassLoader
(URL[] urls, ClassLoader parent, URLStreamHandlerFactory factory) 为指定URLs、父类加载器和URLStreamHandlerFactory创建新的URLClassLoader。 -
Method Summary
Modifier and TypeMethodDescriptionprotected void
将指定的URL附加到要搜索类和资源的URL列表中。void
close()
关闭此URLClassLoader,以便无法再使用该加载器加载由该加载器定义的新类或资源。protected Package
definePackage
(String name, Manifest man, URL url) 在此URLClassLoader
中按名称定义一个新包。protected Class
<?> 从URL搜索路径中查找并加载指定名称的类。findResource
(String name) 在URL搜索路径上查找指定名称的资源。findResources
(String name) 返回表示URL搜索路径上具有指定名称的所有资源的URL枚举。protected PermissionCollection
getPermissions
(CodeSource codesource) 返回给定codesource对象的权限。getResourceAsStream
(String name) 返回用于读取指定资源的输入流。URL[]
getURLs()
返回用于加载类和资源的URL搜索路径。static URLClassLoader
newInstance
(URL[] urls) 为指定URLs和默认父类加载器创建新的URLClassLoader实例。static URLClassLoader
newInstance
(URL[] urls, ClassLoader parent) 为指定URLs和父类加载器创建新的URLClassLoader实例。Methods declared in class java.security.SecureClassLoader
defineClass, defineClass
Methods declared in class java.lang.ClassLoader
clearAssertionStatus, defineClass, defineClass, defineClass, defineClass, definePackage, findClass, findLibrary, findLoadedClass, findResource, findSystemClass, getClassLoadingLock, getDefinedPackage, getDefinedPackages, getName, getPackage, getPackages, getParent, getPlatformClassLoader, getResource, getResources, getSystemClassLoader, getSystemResource, getSystemResourceAsStream, getSystemResources, getUnnamedModule, isRegisteredAsParallelCapable, loadClass, loadClass, registerAsParallelCapable, resolveClass, resources, setClassAssertionStatus, setDefaultAssertionStatus, setPackageAssertionStatus, setSigners
-
Constructor Details
-
URLClassLoader
为给定URLs创建新的URLClassLoader。在首先在指定的父类加载器中搜索后,将按照指定的顺序搜索类和资源。任何jar:
方案URL都被假定为引用JAR文件。任何以'/'结尾的file:
方案URL都被假定为引用目录。否则,URL被假定为引用将根据需要下载和打开的JAR文件。如果存在安全管理器,则此方法首先调用安全管理器的
checkCreateClassLoader
方法,以确保允许创建类加载器。- 参数:
-
urls
- 用于加载类和资源的URLs -
parent
- 用于委派的父类加载器 - 抛出:
-
SecurityException
- 如果存在安全管理器且其checkCreateClassLoader
方法不允许创建类加载器。 -
NullPointerException
- 如果urls
或其任何元素为null
。 - 参见:
-
URLClassLoader
使用默认委派父ClassLoader
为指定URLs创建新的URLClassLoader。将按照指定的顺序搜索类和资源。在父类加载器中搜索后,将搜索URL。任何以'/'结尾的URL都被假定为引用目录。否则,URL被假定为引用将根据需要下载和打开的JAR文件。如果存在安全管理器,则此方法首先调用安全管理器的
checkCreateClassLoader
方法,以确保允许创建类加载器。- 参数:
-
urls
- 用于加载类和资源的URLs - 抛出:
-
SecurityException
- 如果存在安全管理器且其checkCreateClassLoader
方法不允许创建类加载器。 -
NullPointerException
- 如果urls
或其任何元素为null
。 - 参见:
-
URLClassLoader
为指定URLs、父类加载器和URLStreamHandlerFactory创建新的URLClassLoader。将使用父类作为委派的父类加载器。将使用工厂参数作为流处理程序工厂,在创建新的JAR URLs时获取协议处理程序。如果存在安全管理器,则此方法首先调用安全管理器的
checkCreateClassLoader
方法,以确保允许创建类加载器。- 参数:
-
urls
- 用于加载类和资源的URLs -
parent
- 用于委派的父类加载器 -
factory
- 创建URLs时要使用的URLStreamHandlerFactory - 抛出:
-
SecurityException
- 如果存在安全管理器且其checkCreateClassLoader
方法不允许创建类加载器。 -
NullPointerException
- 如果urls
或其任何元素为null
。 - 参见:
-
URLClassLoader
为指定URLs创建新的命名URLClassLoader
。将按照指定的顺序搜索类和资源。任何以'/'结尾的URL都被假定为引用目录。否则,URL被假定为引用将根据需要下载和打开的JAR文件。- 参数:
-
name
- 类加载器名称;如果未命名,则为null
-
urls
- 用于加载类和资源的URLs -
parent
- 用于委派的父类加载器 - 抛出:
-
IllegalArgumentException
- 如果给定名称为空。 -
NullPointerException
- 如果urls
或其任何元素为null
。 -
SecurityException
- 如果存在安全管理器且其SecurityManager.checkCreateClassLoader()
方法不允许创建类加载器。 - 自 JDK 版本:
- 9
-
URLClassLoader
为指定URLs、父类加载器和URLStreamHandlerFactory创建新的命名URLClassLoader
。将使用父类作为委派的父类加载器。将使用工厂参数作为流处理程序工厂,在创建新的JAR URLs时获取协议处理程序。- 参数:
-
name
- 类加载器名称;如果未命名,则为null
-
urls
- 用于加载类和资源的URLs -
parent
- 用于委派的父类加载器 -
factory
- 创建URLs时要使用的URLStreamHandlerFactory - 抛出:
-
IllegalArgumentException
- 如果给定名称为空。 -
NullPointerException
- 如果urls
或其任何元素为null
。 -
SecurityException
- 如果存在安全管理器且其checkCreateClassLoader
方法不允许创建类加载器。 - 自 JDK 版本:
- 9
-
-
Method Details
-
getResourceAsStream
返回用于读取指定资源的输入流。如果此加载器已关闭,则此方法打开的任何资源将被关闭。搜索顺序在
ClassLoader.getResource(String)
的文档中描述。- 覆盖:
-
getResourceAsStream
在类ClassLoader
中 - 参数:
-
name
- 资源名称 - 返回:
-
用于读取资源的输入流,如果找不到资源则返回
null
- 抛出:
-
NullPointerException
- 如果name
为null
- 自 JDK 版本:
- 1.7
-
close
关闭此URLClassLoader,使其无法再用于加载由此加载器定义的新类或资源。仍然可以访问由此加载器的父加载器在委派层次结构中定义的类和资源。同时,任何已加载的类或资源仍然可以访问。对于jar:和file: URL,它还会关闭由它打开的任何文件。如果在调用
close
方法时另一个线程正在加载一个类,则该加载的结果是未定义的。该方法会尽力尝试关闭所有已打开的文件,通过在内部捕获
IOException
。未捕获的异常和错误不会被捕获。对已关闭的加载器调用close没有任何效果。- 指定者:
-
close
在接口AutoCloseable
中 - 指定者:
-
close
在接口Closeable
中 - 抛出:
-
IOException
- 如果关闭此类加载器打开的任何文件导致IOException。任何此类异常都会在内部捕获。如果只捕获了一个异常,则会重新抛出。如果捕获了多个异常,则会将第二个及后续异常添加为第一个捕获的异常的抑制异常,然后重新抛出。 -
SecurityException
- 如果设置了安全管理器,并且它拒绝RuntimePermission
("closeClassLoader")
- 自从:
- 1.7
-
addURL
将指定的URL附加到要搜索类和资源的URL列表中。如果指定的URL为
null
或已在URL列表中,或者如果此加载器已关闭,则调用此方法没有任何效果。- 参数:
-
url
- 要添加到URL搜索路径的URL
-
getURLs
返回用于加载类和资源的URL搜索路径。这包括最初在构造函数中指定的URL列表,以及后来通过addURL()方法附加的任何URL。- 返回:
- 用于加载类和资源的URL搜索路径。
-
findClass
从URL搜索路径中查找并加载具有指定名称的类。任何引用JAR文件的URL都将根据需要加载和打开,直到找到该类。- 覆盖:
-
findClass
在类ClassLoader
中 - 参数:
-
name
- 类的名称 - 返回:
- 结果类
- 抛出:
-
ClassNotFoundException
- 如果找不到类,或者加载器已关闭。 -
NullPointerException
- 如果name
为null
。
-
definePackage
在此URLClassLoader
中按名称定义一个新包。指定的Manifest
中包含的属性将用于获取包版本和封闭信息。对于封闭的包,附加的URL指定了加载该包的代码源URL。- 参数:
-
name
- 包名称 -
man
- 包含包版本和封闭信息的Manifest
-
url
- 包的代码源URL,如果没有则为null - 返回:
-
新定义的
Package
对象 - 抛出:
-
IllegalArgumentException
- 如果包名称已被此类加载器定义
-
findResource
在URL搜索路径上查找具有指定名称的资源。- 覆盖:
-
findResource
在类ClassLoader
中 - 参数:
-
name
- 资源的名称 - 返回:
-
资源的
URL
,如果找不到资源或加载器已关闭,则为null
。
-
findResources
返回一个表示URL搜索路径上具有指定名称的所有资源的URL的枚举。- 覆盖:
-
findResources
在类ClassLoader
中 - 参数:
-
name
- 资源名称 - 返回:
-
一个
URL
的枚举。如果加载器已关闭,则枚举不包含任何元素。 - 抛出:
-
IOException
- 如果发生I/O异常
-
getPermissions
返回给定codesource对象的权限。此方法的实现首先调用super.getPermissions,然后根据codesource的URL添加权限。如果此URL的协议是"jar",则授予的权限基于Jar文件的URL所需的权限。
如果协议是"file"并且有一个权限组件,则可能授予连接到该权限组件并接受该权限组件连接的权限。如果协议是"file"并且路径指定了一个文件,则授予读取该文件的权限。如果协议是"file"并且路径是一个目录,则授予读取该目录中包含的所有文件和(递归地)所有文件和子目录的权限。
如果协议不是"file",则授予连接到URL主机并接受该主机连接的权限。
- 覆盖:
-
getPermissions
在类SecureClassLoader
中 - 参数:
-
codesource
- codesource - 返回:
- 授予给codesource的权限
- 抛出:
-
NullPointerException
- 如果codesource
为null
。
-
newInstance
为指定的URL和父类加载器创建一个新的URLClassLoader实例。如果安装了安全管理器,则此方法返回的URLClassLoader的loadClass
方法在加载类之前将调用SecurityManager.checkPackageAccess
方法。- 参数:
-
urls
- 用于搜索类和资源的URL -
parent
- 用于委派的父类加载器 - 返回:
- 结果类加载器
- 抛出:
-
NullPointerException
- 如果urls
或其任何元素为null
。
-
newInstance
为指定的URL和默认父类加载器创建一个新的URLClassLoader实例。如果安装了安全管理器,则此方法返回的URLClassLoader的loadClass
方法在加载类之前将调用SecurityManager.checkPackageAccess
。- 参数:
-
urls
- 用于搜索类和资源的URL - 返回:
- 结果类加载器
- 抛出:
-
NullPointerException
- 如果urls
或其任何元素为null
。
-