- java.lang.Object
-
- java.lang.ClassLoader
-
- java.security.SecureClassLoader
-
- java.net.URLClassLoader
-
- 实现的所有接口
-
Closeable
,AutoCloseable
- 已知直接子类:
-
MLet
public class URLClassLoader extends SecureClassLoader implements Closeable
此类加载器用于从引用JAR文件和目录的URL的搜索路径加载类和资源。 假定任何jar:
方案URL(参见JarURLConnection
)引用JAR文件。 任何以'/'结尾的file:
方案URL都假定为引用目录。 否则,假定URL引用将根据需要打开的JAR文件。此类加载器支持从给定URL引用的multi-release JAR文件的内容加载类和资源。
随后加载类和资源时,将使用创建URLClassLoader实例的线程的AccessControlContext。
默认情况下,加载的类仅被授予访问创建URLClassLoader时指定的URL的权限。
- 从以下版本开始:
- 1.2
-
-
构造方法摘要
构造方法 构造器 描述 URLClassLoader(String name, URL[] urls, ClassLoader parent)
为指定的URL构造一个名为URLClassLoader
的新名称。URLClassLoader(String name, URL[] urls, ClassLoader parent, URLStreamHandlerFactory factory)
为指定的URL,父类加载器和URLStreamHandlerFactory构造一个名为URLClassLoader
的新名称。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列表以搜索类和资源。void
close()
关闭此URLClassLoader,以便它不再可用于加载此加载程序定义的新类或资源。protected 软件包
definePackage(String name, Manifest man, URL url)
在URLClassLoader
按名称定义新包。protected 类<?>
findClass(String name)
从URL搜索路径中查找并加载具有指定名称的类。URL
findResource(String name)
在URL搜索路径中查找具有指定名称的资源。Enumeration<URL>
findResources(String name)
返回表示具有指定名称的URL搜索路径上的所有资源的URL枚举。protected PermissionCollection
getPermissions(CodeSource codesource)
返回给定codesource对象的权限。InputStream
getResourceAsStream(String name)
返回用于读取指定资源的输入流。URL[]
getURLs()
返回用于加载类和资源的URL的搜索路径。static URLClassLoader
newInstance(URL[] urls)
为指定的URL和默认父类加载器创建URLClassLoader的新实例。static URLClassLoader
newInstance(URL[] urls, ClassLoader parent)
为指定的URL和父类加载器创建URLClassLoader的新实例。-
声明方法的类 java.security.SecureClassLoader
defineClass, defineClass
-
声明方法的类 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
-
-
-
-
构造方法详细信息
-
URLClassLoader
public URLClassLoader(URL[] urls, ClassLoader parent)
为给定的URL构造一个新的URLClassLoader。 首次在指定的父类加载器中搜索后,将按照为类和资源指定的顺序搜索URL。 假定任何jar:
方案URL都引用JAR文件。 任何以'/'结尾的file:
方案URL都假定为引用目录。 否则,假定URL引用将根据需要下载和打开的JAR文件。如果有安全管理器,则此方法首先调用安全管理器的
checkCreateClassLoader
方法,以确保允许创建类加载器。- 参数
-
urls
- 从中加载类和资源的URL -
parent
- 用于委派的父类加载器 - 异常
-
SecurityException
- 如果存在安全管理器且其checkCreateClassLoader
方法不允许创建类加载器。 -
NullPointerException
- 如果urls
或其任何元素是null
。 - 另请参见:
-
SecurityManager.checkCreateClassLoader()
-
URLClassLoader
public URLClassLoader(URL[] urls)
使用默认委托父级ClassLoader
为指定的URL构造新的URLClassLoader。 首次在父类加载器中搜索后,将按照为类和资源指定的顺序搜索URL。 任何以“/”结尾的URL都被假定为引用目录。 否则,假定URL引用将根据需要下载和打开的JAR文件。如果有安全管理器,则此方法首先调用安全管理器的
checkCreateClassLoader
方法,以确保允许创建类加载器。- 参数
-
urls
- 从中加载类和资源的URL - 异常
-
SecurityException
- 如果存在安全管理器且其checkCreateClassLoader
方法不允许创建类加载器。 -
NullPointerException
- 如果urls
或其任何元素是null
。 - 另请参见:
-
SecurityManager.checkCreateClassLoader()
-
URLClassLoader
public URLClassLoader(URL[] urls, ClassLoader parent, URLStreamHandlerFactory factory)
为指定的URL,父类加载器和URLStreamHandlerFactory构造一个新的URLClassLoader。 parent参数将用作委托的父类加载器。 factory参数将用作流处理程序工厂,以在创建新的jar URL时获取协议处理程序。如果有安全管理器,则此方法首先调用安全管理器的
checkCreateClassLoader
方法,以确保允许创建类加载器。- 参数
-
urls
- 从中加载类和资源的URL -
parent
- 用于委派的父类加载器 -
factory
- 创建URL时使用的URLStreamHandlerFactory - 异常
-
SecurityException
- 如果存在安全管理器且其checkCreateClassLoader
方法不允许创建类加载器。 -
NullPointerException
- 如果urls
或其任何元素为null
。 - 另请参见:
-
SecurityManager.checkCreateClassLoader()
-
URLClassLoader
public URLClassLoader(String name, URL[] urls, ClassLoader parent)
为指定的URL构造一个名为URLClassLoader
的新名称。 首次在指定的父类加载器中搜索后,将按照为类和资源指定的顺序搜索URL。 任何以“/”结尾的URL都被假定为引用目录。 否则,假定URL引用将根据需要下载和打开的JAR文件。- 参数
-
name
- 类加载器名称; 或null
如果没有命名 -
urls
- 从中加载类和资源的URL -
parent
- 用于委派的父类加载器 - 异常
-
IllegalArgumentException
- 如果给定名称为空。 -
NullPointerException
- 如果urls
或其任何元素是null
。 -
SecurityException
- 如果存在安全管理器且其SecurityManager.checkCreateClassLoader()
方法不允许创建类加载器。 - 从以下版本开始:
- 9
-
URLClassLoader
public URLClassLoader(String name, URL[] urls, ClassLoader parent, URLStreamHandlerFactory factory)
为指定的URL,父类加载器和URLStreamHandlerFactory构造一个名为URLClassLoader
的新名称。 parent参数将用作委托的父类加载器。 factory参数将用作流处理程序工厂,以在创建新的jar URL时获取协议处理程序。- 参数
-
name
- 类加载器名称; 或null
如果没有命名 -
urls
- 从中加载类和资源的URL -
parent
- 用于委派的父类加载器 -
factory
- 创建URL时使用的URLStreamHandlerFactory - 异常
-
IllegalArgumentException
- 如果给定名称为空。 -
NullPointerException
- 如果urls
或其任何元素是null
。 -
SecurityException
- 如果存在安全管理器且其checkCreateClassLoader
方法不允许创建类加载器。 - 从以下版本开始:
- 9
-
-
方法详细信息
-
getResourceAsStream
public InputStream getResourceAsStream(String name)
- 重写:
-
getResourceAsStream
在类ClassLoader
- 参数
-
name
- 资源名称 - 结果
-
用于读取资源的输入流,如果找不到资源,
null
- 异常
-
NullPointerException
- 如果name
是null
- 从以下版本开始:
- 1.7
-
close
public void close() throws IOException
关闭此URLClassLoader,以便它不再可用于加载此加载程序定义的新类或资源。 仍可访问由委托层次结构中的任何加载程序父项定义的类和资源。 此外,仍然可以访问已加载的任何类或资源。对于jar:和file:URL,它还会关闭由它打开的所有文件。 如果在调用
close
方法时另一个线程正在加载类,则该加载的结果是未定义的。该方法尽最大努力尝试关闭所有打开的文件,在内部捕获
IOException
。 未捕获未经检查的异常和错误。 在已经关闭的加载器上调用close无效。- Specified by:
-
close
在界面AutoCloseable
- Specified by:
-
close
在界面Closeable
- 异常
-
IOException
- 如果关闭此类加载器打开的任何文件,则会导致IOException。 任何此类例外都在内部捕获。 如果只有一个被抓住,那么它会被重新抛出。 如果捕获了多个异常,则会添加第二个和后续异常作为捕获的第一个异常,然后重新抛出。 -
SecurityException
- 如果设置了安全管理器,则拒绝RuntimePermission
("closeClassLoader")
- 从以下版本开始:
- 1.7
-
addURL
protected void addURL(URL url)
将指定的URL附加到URL列表以搜索类和资源。如果指定的URL是
null
或已经在URL列表中,或者此加载器已关闭,则调用此方法无效。- 参数
-
url
- 要添加到URL搜索路径的URL
-
getURLs
public URL[] getURLs()
返回用于加载类和资源的URL的搜索路径。 这包括为构造函数指定的原始URL列表,以及随后由addURL()方法追加的任何URL。- 结果
- 用于加载类和资源的URL的搜索路径。
-
findClass
protected 类<?> findClass(String name) throws ClassNotFoundException
从URL搜索路径中查找并加载具有指定名称的类。 引用JAR文件的任何URL都会根据需要加载和打开,直到找到该类。- 重写:
-
findClass
类ClassLoader
- 参数
-
name
- 该类的名称 - 结果
- 由此产生的课程
- 异常
-
ClassNotFoundException
- 如果找不到类,或者加载程序已关闭。 -
NullPointerException
- 如果name
是null
。
-
definePackage
protected 软件包 definePackage(String name, Manifest man, URL url)
在URLClassLoader
按名称定义新包。 指定的Manifest
包含的属性将用于获取包版本和密封信息。 对于密封包,附加URL指定从中加载包的代码源URL。- 参数
-
name
- 包名称 -
man
- 包含封装版本和封装信息的Manifest
-
url
- 程序包的代码源URL,如果没有,则为null - 结果
-
新定义的
软件包
对象 - 异常
-
IllegalArgumentException
- 如果包名已由此类加载器定义
-
findResource
public URL findResource(String name)
在URL搜索路径中查找具有指定名称的资源。- 重写:
-
findResource
在类ClassLoader
- 参数
-
name
- 资源的名称 - 结果
-
一个
URL
的资源,或null
如果资源不能被发现,或者如果加载器关闭。
-
findResources
public Enumeration<URL> findResources(String name) throws IOException
返回表示具有指定名称的URL搜索路径上的所有资源的URL枚举。- 重写:
-
findResources
类ClassLoader
- 参数
-
name
- 资源名称 - 结果
-
Enumeration
ofURL
s。 如果加载程序已关闭,则枚举不包含任何元素。 - 异常
-
IOException
- 如果发生I / O异常
-
getPermissions
protected PermissionCollection getPermissions(CodeSource codesource)
返回给定codesource对象的权限。 此方法的实现首先调用super.getPermissions,然后根据codesource的URL添加权限。如果此URL的协议是“jar”,则授予的权限基于Jar文件的URL所需的权限。
如果协议是“文件”并且存在权限组件,则可以授予连接和接受来自该权限的连接的许可。 如果协议是“文件”并且路径指定文件,则授予读取该文件的权限。 如果protocol是“file”且路径是目录,则授予读取所有文件和(递归地)包含在该目录中的所有文件和子目录的权限。
如果协议不是“文件”,则授予连接和接受来自URL主机的连接的权限。
- 重写:
-
getPermissions
在类SecureClassLoader
- 参数
-
codesource
- codesource - 结果
- 授予codesource的权限
- 异常
-
NullPointerException
- 如果codesource
是null
。
-
newInstance
public static URLClassLoader newInstance(URL[] urls, ClassLoader parent)
为指定的URL和父类加载器创建URLClassLoader的新实例。 如果安装了安全管理器,该loadClass
的URLClassLoader的方法此方法返回的将调用SecurityManager.checkPackageAccess
加载类方法之前。- 参数
-
urls
- 用于搜索类和资源的URL -
parent
- 用于委派的父类加载器 - 结果
- 生成的类加载器
- 异常
-
NullPointerException
- 如果urls
或其任何元素是null
。
-
newInstance
public static URLClassLoader newInstance(URL[] urls)
为指定的URL和默认父类加载器创建URLClassLoader的新实例。 如果安装了安全管理器,该loadClass
的URLClassLoader的方法此方法返回的将调用SecurityManager.checkPackageAccess
加载类之前。- 参数
-
urls
- 搜索类和资源的URL - 结果
- 生成的类加载器
- 异常
-
NullPointerException
- 如果urls
或其任何元素是null
。
-
-