java.lang.Object java.lang.ClassLoader java.security.SecureClassLoader java.net.URLClassLoader
public class URLClassLoader
该类加载器用于从指向 JAR 文件和目录的 URL 的搜索路径加载类和资源。这里假定任何以 '/' 结束的 URL 都是指向目录的。如果不是以该字符结束,则认为该 URL 指向一个将根据需要打开的 JAR 文件。
创建 URLClassLoader 实例的 AccessControlContext 线程将在后续加载类和资源时使用。
为加载的类默认授予只能访问 URLClassLoader 创建时指定的 URL 的权限。
构造方法摘要 | |
---|---|
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 列表中,以便搜索类和资源。 |
protected Package |
definePackage(String name, Manifest man, URL url) 用该 ClassLoader 中的名称定义一个新包。 |
protected Class<?> |
findClass(String name) 通过 URL 搜索路径查找并加载具有指定名称的类。 |
URL |
findResource(String name) 在 URL 搜索路径中查找具有指定名称的资源。 |
Enumeration<URL> |
findResources(String name) 返回表示 URL 搜索路径中具有指定名称的所有资源的 URL 枚举。 |
protected PermissionCollection |
getPermissions(CodeSource codesource) 返回给定 codesource 对象的权限。 |
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.Object 继承的方法 |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
构造方法详细信息 |
---|
public URLClassLoader(URL[] urls, ClassLoader parent)
如果有安全管理器,该方法首先调用安全管理器的 checkCreateClassLoader
方法以确保允许创建类加载器。
urls
- 从其位置加载类和资源的 UR
parent
- 用于委托的父类加载器
SecurityException
- 如果存在安全管理器,且其
checkCreateClassLoader
方法不允许创建类加载器。
SecurityManager.checkCreateClassLoader()
public URLClassLoader(URL[] urls)
ClassLoader
为指定的 URL 构造一个新 URLClassLoader。首先在父类加载器中搜索 URL,然后按照为类和资源指定的顺序搜索 URL。这里假定任何以 '/' 结束的 URL 都是指向目录的。如果不是以该字符结束,则认为该 URL 指向一个将根据需要下载和打开的 JAR 文件。
如果有安全管理器,该方法首先调用安全管理器的 checkCreateClassLoader
方法以确保允许创建类加载器。
urls
- 从其位置加载类和资源的 URL
SecurityException
- 如果安全管理器存在并且其
checkCreateClassLoader
方法不允许创建类加载器。
SecurityManager.checkCreateClassLoader()
public URLClassLoader(URL[] urls, ClassLoader parent, URLStreamHandlerFactory factory)
如果有安全管理器,该方法首先调用安全管理器的 checkCreateClassLoader
方法以确保允许创建类加载器。
urls
- 从其位置加载类和资源的 URL
parent
- 用于委托的父类加载器
factory
- 创建 URL 时使用的 URLStreamHandlerFactory
SecurityException
- 如果安全管理器存在并且其
checkCreateClassLoader
方法不允许创建类加载器。
SecurityManager.checkCreateClassLoader()
方法详细信息 |
---|
protected void addURL(URL url)
url
- 将添加到 URL 搜索路径中的 URL
public URL[] getURLs()
protected Class<?> findClass(String name) throws ClassNotFoundException
ClassLoader
中的
findClass
name
- 类的名称
ClassNotFoundException
- 如果无法找到该类
protected Package definePackage(String name, Manifest man, URL url) throws IllegalArgumentException
name
- 包的名称
man
- 包含包的版本和密封信息的 Manifest
url
- 包的代码源 url,或者如果没有,则为 null
IllegalArgumentException
- 如果包的名称与该类加载器或其祖先之一中现有的包重名
public URL findResource(String name)
ClassLoader
中的
findResource
name
- 资源的名称
URL
,或者如果无法找到该资源,则返回
null
。
public Enumeration<URL> findResources(String name) throws IOException
ClassLoader
中的
findResources
name
- 资源名称
URL
的
枚举
IOException
- 如果发生 I/O 异常
protected PermissionCollection getPermissions(CodeSource codesource)
如果此 URL 的协议为 "jar",那么授予的权限将基于 Jar 文件 URL 所请求的权限。
如果协议为 "file",并且路径指定了某个文件,则要授予对该文件的读权限。如果协议为 "file",并且路径是一个目录,则要授予该目录中的所有文件及其(递归)子目录中包含的所有文件读权限。
如果协议不是 "file",则允许连接到和接收来自 URL 主机的连接。
SecureClassLoader
中的
getPermissions
codesource
- codesource
public static URLClassLoader newInstance(URL[] urls, ClassLoader parent)
loadClass
方法将在加载该类之前调用
SecurityManager.checkPackageAccess
方法。
urls
- 用于搜索类和资源的 URL
parent
- 用于委托的父类加载器
public static URLClassLoader newInstance(URL[] urls)
loadClass
方法将在加载该类之前调用
SecurityManager.checkPackageAccess
。
urls
- 用于搜索类和资源的 URL