public class URLClassLoader extends SecureClassLoader implements Closeable
当后续加载类和资源时,将使用创建URLClassLoader实例的线程的AccessControlContext。
加载的类默认授权只能访问URLClassLoader创建时指定的URL。
Constructor and Description |
---|
URLClassLoader(URL[] urls)
使用默认委托父级
ClassLoader 为指定的URL构造一个新的
ClassLoader 。
|
URLClassLoader(URL[] urls, ClassLoader parent)
为给定的URL构造一个新的URLClassLoader。
|
URLClassLoader(URL[] urls, ClassLoader parent, URLStreamHandlerFactory factory)
为指定的URL,父类加载器和URLStreamHandlerFactory构造一个新的URLClassLoader。
|
Modifier and Type | Method and Description |
---|---|
protected void |
addURL(URL url)
将指定的URL附加到URL列表中以搜索类和资源。
|
void |
close()
关闭此URLClassLoader,以使其不能再用于加载由此加载程序定义的新类或资源。
|
protected 软件包 |
definePackage(String name, Manifest man, URL url)
在此ClassLoader中按名称定义新包。
|
protected 类<?> |
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的新实例。
|
defineClass, defineClass
clearAssertionStatus, defineClass, defineClass, defineClass, defineClass, definePackage, findLibrary, findLoadedClass, findSystemClass, getClassLoadingLock, getPackage, getPackages, getParent, getResource, getResources, getSystemClassLoader, getSystemResource, getSystemResourceAsStream, getSystemResources, loadClass, loadClass, registerAsParallelCapable, resolveClass, setClassAssertionStatus, setDefaultAssertionStatus, setPackageAssertionStatus, setSigners
public URLClassLoader(URL[] urls, ClassLoader parent)
如果有一个安全管理器,这个方法首先调用安全管理器的checkCreateClassLoader
方法,以确保允许创建一个类加载器。
urls
- 加载类和资源的URL
parent
- 用于委派的父类加载器
SecurityException
- 如果安全管理器存在,并且其
checkCreateClassLoader
方法不允许创建类加载器。
NullPointerException
- 如果
urls
是
null
。
SecurityManager.checkCreateClassLoader()
public URLClassLoader(URL[] urls)
ClassLoader
为指定的URL构造一个新的ClassLoader
。
在首次搜索父类加载器后,将按照为类和资源指定的顺序搜索URL。
任何以“/”结尾的URL都假定是指一个目录。
否则,URL被认为是指根据需要下载并打开的JAR文件。
如果有一个安全管理器,这个方法首先调用安全管理器的checkCreateClassLoader
方法来确保允许创建一个类加载器。
urls
- 加载类和资源的URL
SecurityException
- 如果安全管理器存在,并且其
checkCreateClassLoader
方法不允许创建类加载器。
NullPointerException
- 如果
urls
是
null
。
SecurityManager.checkCreateClassLoader()
public URLClassLoader(URL[] urls, ClassLoader parent, URLStreamHandlerFactory factory)
如果有一个安全管理器,这个方法首先调用安全管理器的checkCreateClassLoader
方法,以确保允许创建一个类加载器。
urls
- 加载类和资源的URL
parent
- 用于委派的父类加载器
factory
- 创建URL时要使用的URLStreamHandlerFactory
SecurityException
- 如果安全管理器存在,并且其
checkCreateClassLoader
方法不允许创建类加载器。
NullPointerException
- 如果
urls
是
null
。
SecurityManager.checkCreateClassLoader()
public InputStream getResourceAsStream(String name)
getResourceAsStream
在
ClassLoader
name
- 资源名称
null
public void close() throws IOException
在jar:和file:URL的情况下,它也会关闭它打开的任何文件。 如果在调用close
方法时另一个线程正在加载一个类,那么该负载的结果是未定义的。
该方法通过在内部捕获IOException
来尽最大努力关闭所有打开的文件。 未被检查的异常和错误未被捕获。 在已关闭的加载程序上关闭呼叫没有任何影响。
close
在接口
Closeable
close
在接口
AutoCloseable
IOException
- 如果关闭此类加载器打开的任何文件导致IOException。
任何此类异常都在内部被捕获。
如果只有一个被捕获,那么它被重新抛出。
如果捕获了多个异常,则将第二个和以下异常作为被捕获的第一个异常的被抑制异常添加,然后被重新抛出。
SecurityException
- 如果安全管理员被设置,并且它拒绝RuntimePermission
("closeClassLoader")
protected void addURL(URL url)
如果指定的URL为null
或已经在URL列表中,或者如果此加载程序已关闭,则调用此方法将不起作用。
url
- 要添加到URL搜索路径的URL
public URL[] getURLs()
protected 类<?> findClass(String name) throws ClassNotFoundException
findClass
在
ClassLoader
name
- 类的名称
ClassNotFoundException
- 如果找不到类,或者装载器关闭。
NullPointerException
- 如果
name
是
null
。
protected 软件包 definePackage(String name, Manifest man, URL url) throws IllegalArgumentException
name
- 包名称
man
- 包含包装版本和密封信息的清单
url
- 包的代码源URL,如果没有,则为null
IllegalArgumentException
- 如果程序包名称在该类加载器或其祖先之一中复制现有程序包
public URL findResource(String name)
findResource
在
ClassLoader
name
- 资源的名称
URL
的资源,或
null
如果资源无法找到,或者加载程序关闭。
public Enumeration<URL> findResources(String name) throws IOException
findResources
在
ClassLoader
类
name
- 资源名称
Enumeration
的
URL
s如果装载程序关闭,枚举将为空。
IOException
- 如果发生I / O异常
protected PermissionCollection getPermissions(CodeSource codesource)
如果此URL的协议是“jar”,则授予的权限基于Jar文件的URL所需的权限。
如果协议是“文件”,并且有一个权限组件,则可以授予连接到并接受来自该授权机构的连接的权限。 如果协议是“文件”,并且路径指定了一个文件,则授予读取该文件的权限。 如果协议是“文件”并且路径是目录,则授予许可权以读取所有文件,并递归地递送该目录中包含的所有文件和子目录。
如果协议不是“文件”,则授予连接到并接受URL主机的连接的权限。
getPermissions
在
SecureClassLoader
codesource
- 代码源
NullPointerException
- 如果
codesource
是
null
。
public static URLClassLoader newInstance(URL[] urls, ClassLoader parent)
loadClass
的URLClassLoader的方法此方法返回的将调用SecurityManager.checkPackageAccess
加载类方法之前。
urls
- 搜索课程和资源的URL
parent
- 用于委派的父类加载器
NullPointerException
- 如果
urls
是
null
。
public static URLClassLoader newInstance(URL[] urls)
loadClass
的URLClassLoader的方法此方法返回的将调用SecurityManager.checkPackageAccess
加载类之前。
urls
- 搜索课程和资源的URL
NullPointerException
- 如果
urls
是
null
。