- java.lang.Object
-
- java.lang.ClassLoader
-
- java.security.SecureClassLoader
-
- java.net.URLClassLoader
-
- All Implemented Interfaces:
-
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
-
-
构造方法摘要
构造方法 Constructor 描述 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。
-
方法摘要
所有方法 静态方法 接口方法 具体的方法 Modifier and Type 方法 描述 protected void
addURL(URL url)
将指定的URL附加到URL列表中以搜索类和资源。void
close()
关闭此URLClassLoader,以使其不能再用于加载由此加载程序定义的新类或资源。protected 软件包
definePackage(String name, Manifest man, URL url)
在这个URLClassLoader
按名称定义一个新的包。protected Class<?>
findClass(String name)
从URL搜索路径查找并加载具有指定名称的类。URL
findResource(String name)
在URL搜索路径上查找具有指定名称的资源。Enumeration<URL>
findResources(String name)
返回表示URL搜索路径上具有指定名称的所有资源的URL的枚举。protected PermissionCollection
getPermissions(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的新实例。-
Methods inherited from 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
-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-
Methods inherited from class java.security.SecureClassLoader
defineClass, defineClass
-
-
-
-
构造方法详细信息
-
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。 父参数将被用作委托的父类加载器。 在创建新的jar URL时,factory参数将用作流处理程序工厂来获取协议处理程序。如果有安全管理员,则该方法首先调用安全管理器的
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
。 父参数将被用作委托的父类加载器。 在创建新的jar URL时,factory参数将用作流处理程序工厂来获取协议处理程序。- 参数
-
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
来尽最大努力关闭所有已打开的文件。 未被检查的异常和错误未被捕获。 在已关闭的加载程序上关闭呼叫没有任何影响。- 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 Class<?> 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
的URL
s如果加载程序关闭,枚举将为空。 - 异常
-
IOException
- 如果发生I / O异常
-
getPermissions
protected PermissionCollection getPermissions(CodeSource codesource)
返回给定的代码源对象的权限。 该方法的实现首先调用super.getPermissions,然后根据代码源的URL添加权限。如果此URL的协议是“jar”,则授予的权限基于Jar文件的URL所需的权限。
如果协议是“文件”,并且有一个权限组件,则可以授予连接到并接受来自该授权机构的连接的权限。 如果协议是“文件”,并且路径指定了一个文件,则授予读取该文件的权限。 如果协议是“文件”并且路径是目录,则授予许可以读取所有文件,并递归地递送该目录中包含的所有文件和子目录。
如果协议不是“文件”,则授予连接到并接受URL主机的连接的权限。
- 重写:
-
getPermissions
在SecureClassLoader
- 参数
-
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
。
-
-