java.net

接口
异常
java.lang.Object
  继承者 java.lang.ClassLoader
      继承者 java.security.SecureClassLoader
          继承者 java.net.URLClassLoader
直接已知子类:
MLet

public class URLClassLoader
     
extends SecureClassLoader

该类加载器用于从指向 JAR 文件和目录的 URL 的搜索路径加载类和资源。这里假定任何以 '/' 结束的 URL 都是指向目录的。如果不是以该字符结束,则认为该 URL 指向一个将根据需要打开的 JAR 文件。

创建 URLClassLoader 实例的 AccessControlContext 线程将在后续加载类和资源时使用。

为加载的类默认授予只能访问 URLClassLoader 创建时指定的 URL 的权限。

从以下版本开始:
1.2

构造方法摘要
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.ClassLoader 继承的方法
clearAssertionStatus, defineClass, defineClass, defineClass, defineClass, definePackage, findLibrary, findLoadedClass, findSystemClass, getPackage, getPackages, getParent, getResource, getResourceAsStream, getResources, getSystemClassLoader, getSystemResource, getSystemResourceAsStream, getSystemResources, loadClass, loadClass, resolveClass, setClassAssertionStatus, setDefaultAssertionStatus, setPackageAssertionStatus, setSigners
 
从类 java.lang.Object 继承的方法
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

构造方法详细信息

URLClassLoader

public URLClassLoader(URL[] urls,
                      ClassLoader parent)
为给定的 URL 构造新 URLClassLoader。首先在指定的父类加载器中搜索 URL,然后按照为类和资源指定的顺序搜索 URL。这里假定任何以 '/' 结束的 URL 都是指向目录的。如果不是以该字符结束,则认为该 URL 指向一个将根据需要下载和打开的 JAR 文件。

如果有安全管理器,该方法首先调用安全管理器的 checkCreateClassLoader 方法以确保允许创建类加载器。

参数:
urls - 从其位置加载类和资源的 UR
parent - 用于委托的父类加载器
抛出:
SecurityException - 如果存在安全管理器,且其 checkCreateClassLoader 方法不允许创建类加载器。
另请参见:
SecurityManager.checkCreateClassLoader()

URLClassLoader

public URLClassLoader(URL[] urls)
使用默认的委托父 ClassLoader 为指定的 URL 构造一个新 URLClassLoader。首先在父类加载器中搜索 URL,然后按照为类和资源指定的顺序搜索 URL。这里假定任何以 '/' 结束的 URL 都是指向目录的。如果不是以该字符结束,则认为该 URL 指向一个将根据需要下载和打开的 JAR 文件。

如果有安全管理器,该方法首先调用安全管理器的 checkCreateClassLoader 方法以确保允许创建类加载器。

参数:
urls - 从其位置加载类和资源的 URL
抛出:
SecurityException - 如果安全管理器存在并且其 checkCreateClassLoader 方法不允许创建类加载器。
另请参见:
SecurityManager.checkCreateClassLoader()

URLClassLoader

public URLClassLoader(URL[] urls,
                      ClassLoader parent,
                      URLStreamHandlerFactory factory)
为指定的 URL、父类加载器和 URLStreamHandlerFactory 创建新 URLClassLoader。该父参数将充当委托的父类加载器。该工厂参数将充当创建新 jar URL 时获取协议处理程序的流处理程序工厂。

如果有安全管理器,该方法首先调用安全管理器的 checkCreateClassLoader 方法以确保允许创建类加载器。

参数:
urls - 从其位置加载类和资源的 URL
parent - 用于委托的父类加载器
factory - 创建 URL 时使用的 URLStreamHandlerFactory
抛出:
SecurityException - 如果安全管理器存在并且其 checkCreateClassLoader 方法不允许创建类加载器。
另请参见:
SecurityManager.checkCreateClassLoader()
方法详细信息

addURL

protected void addURL(URL url)
将指定的 URL 添加到 URL 列表中,以便搜索类和资源。

参数:
url - 将添加到 URL 搜索路径中的 URL

getURLs

public URL[] getURLs()
返回用于加载类和资源的 URL 搜索路径。这包括为构造方法指定的原始 URL 列表,以及由 addURL() 方法后续添加的 URL。

返回:
用于加载类和资源的 URL 搜索路径。

findClass

protected Class<?> findClass(String name)
                      throws ClassNotFoundException
通过 URL 搜索路径查找并加载具有指定名称的类。只有在找到该类后,才能根据需要加载和打开任何指向 JAR 文件的 URL。

覆盖:
ClassLoader 中的 findClass
参数:
name - 类的名称
返回:
结果类
抛出:
ClassNotFoundException - 如果无法找到该类

definePackage

protected Package definePackage(String name,
                                Manifest man,
                                URL url)
                         throws IllegalArgumentException
用该 ClassLoader 中的名称定义一个新包。该指定的 Manifest 中包含的属性将用于包含包版本和密封信息。对于密封的包,此附加 URL 从加载该包的 URL 指定代码源 URL。

参数:
name - 包的名称
man - 包含包的版本和密封信息的 Manifest
url - 包的代码源 url,或者如果没有,则为 null
返回:
新定义的 Package 对象
抛出:
IllegalArgumentException - 如果包的名称与该类加载器或其祖先之一中现有的包重名

findResource

public URL findResource(String name)
在 URL 搜索路径中查找具有指定名称的资源。

覆盖:
ClassLoader 中的 findResource
参数:
name - 资源的名称
返回:
资源的 URL,或者如果无法找到该资源,则返回 null

findResources

public Enumeration<URL> findResources(String name)
                               throws IOException
返回表示 URL 搜索路径中具有指定名称的所有资源的 URL 枚举。

覆盖:
ClassLoader 中的 findResources
参数:
name - 资源名称
返回:
URL枚举
抛出:
IOException - 如果发生 I/O 异常

getPermissions

protected PermissionCollection getPermissions(CodeSource codesource)
返回给定 codesource 对象的权限。该方法的实现首先调用 super.getPermissions,然后基于 codesource 的 URL 添加权限。

如果此 URL 的协议为 "jar",那么授予的权限将基于 Jar 文件 URL 所请求的权限。

如果协议为 "file",并且路径指定了某个文件,则要授予对该文件的读权限。如果协议为 "file",并且路径是一个目录,则要授予该目录中的所有文件及其(递归)子目录中包含的所有文件读权限。

如果协议不是 "file",则允许连接到和接收来自 URL 主机的连接。

覆盖:
SecureClassLoader 中的 getPermissions
参数:
codesource - codesource
返回:
授予 codesource 的权限

newInstance

public static URLClassLoader newInstance(URL[] urls,
                                         ClassLoader parent)
为指定的 URL 和父类加载器创建新 URLClassLoader 实例。如果安装了安全管理器,该方法返回的 URLClassLoader 的 loadClass 方法将在加载该类之前调用 SecurityManager.checkPackageAccess 方法。

参数:
urls - 用于搜索类和资源的 URL
parent - 用于委托的父类加载器
返回:
结果类加载器

newInstance

public static URLClassLoader newInstance(URL[] urls)
为指定的 URL 和默认的父类加载器创建新 URLClassLoader 实例。如果安装了安全管理器,该方法返回的 URLClassLoader 的 loadClass 方法将在加载该类之前调用 SecurityManager.checkPackageAccess

参数:
urls - 用于搜索类和资源的 URL
返回:
结果类加载器