模块 java.base
 java.net

类 URLClassLoader

所有已实现的接口:
Closeable , AutoCloseable
已知子类:
MLet

public class URLClassLoader extends SecureClassLoader implements Closeable
此类加载器用于从引用 JAR 文件和目录的 URL 的搜索路径加载类和资源。假定任何 jar: 方案 URL(请参阅 JarURLConnection )引用 JAR 文件。假定以“/”结尾的任何 file: 方案 URL 都指向一个目录。否则,假定 URL 引用一个 JAR 文件,该文件将在需要时打开。

该类加载器支持从给定 URL 引用的 多版本JAR 文件的内容加载类和资源。

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

默认情况下,加载的类仅被授予访问创建 URLClassLoader 时指定的 URL 的权限。

自从:
1.2
  • 构造方法详细信息

    • 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
      参见:
    • URLClassLoader

      public URLClassLoader(URL [] urls)
      使用默认委托父级 ClassLoader 为指定的 URL 构造一个新的 URLClassLoader。在父类加载器中首次搜索后,将按照为类和资源指定的顺序搜索 URL。假定以“/”结尾的任何 URL 都指向一个目录。否则,假定 URL 引用一个 JAR 文件,该文件将根据需要下载和打开。

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

      参数:
      urls - 从中加载类和资源的 URL
      抛出:
      SecurityException - 如果安全管理器存在并且其 checkCreateClassLoader 方法不允许创建类加载器。
      NullPointerException - 如果 urls 或其任何元素是 null
      参见:
    • URLClassLoader

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

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

      参数:
      urls - 从中加载类和资源的 URL
      parent - 委托的父类加载器
      factory - 创建 URL 时要使用的 URLStreamHandlerFactory
      抛出:
      SecurityException - 如果安全管理器存在并且其 checkCreateClassLoader 方法不允许创建类加载器。
      NullPointerException - 如果 urls 或其任何元素是 null
      参见:
    • 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 参数将用作委托的父类加载器。工厂参数将用作流处理程序工厂,以在创建新的 jar URL 时获取协议处理程序。
      参数:
      name - 类加载器名称;或者 null 如果没有命名
      urls - 从中加载类和资源的 URL
      parent - 委托的父类加载器
      factory - 创建 URL 时要使用的 URLStreamHandlerFactory
      抛出:
      IllegalArgumentException - 如果给定名称为空。
      NullPointerException - 如果 urls 或其任何元素是 null
      SecurityException - 如果安全管理器存在并且其 checkCreateClassLoader 方法不允许创建类加载器。
      自从:
      9
  • 方法详情

    • getResourceAsStream

      public InputStream  getResourceAsStream(String  name)
      返回用于读取指定资源的输入流。如果此加载程序关闭,则此方法打开的任何资源都将关闭。

      ClassLoader.getResource(String) 的文档中描述了搜索顺序。

      重写:
      getResourceAsStream 在类 ClassLoader
      参数:
      name - 资源名称
      返回:
      用于读取资源的输入流,如果找不到资源,则返回 null
      抛出:
      NullPointerException - 如果 namenull
      自从:
      1.7
    • close

      public void close() throws IOException
      关闭此 URLClassLoader,以便它不能再用于加载由此加载程序定义的新类或资源。委托层次结构中此加载器的任何父代定义的类和资源仍然可以访问。此外,任何已经加载的类或资源仍然可以访问。

      对于 jar: 和 file: URL,它还会关闭它打开的所有文件。如果在调用 close 方法时另一个线程正在加载一个类,则该加载的结果是未定义的。

      该方法通过在内部捕获 IOException 来尽最大努力尝试关闭所有打开的文件。未经检查的异常和错误不会被捕获。在已经关闭的加载器上调用 close 没有任何效果。

      指定者:
      close 在接口 AutoCloseable
      指定者:
      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 - 如果 namenull
    • definePackage

      protected   definePackage(String  name, Manifest  man, URL  url)
      在此 URLClassLoader 中按名称定义新包。指定Manifest中包含的属性将用于获取包版本和密封信息。对于密封包,附加 URL 指定从中加载包的代码源 URL。
      参数:
      name - 包名
      man - 包含封装版本和密封信息的 Manifest
      url - 包的代码源 url,如果没有则为 null
      返回:
      新定义的 Package 对象
      抛出:
      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 - 资源名称
      返回:
      URLEnumeration。如果加载程序已关闭,则 Enumeration 不包含任何元素。
      抛出:
      IOException - 如果发生 I/O 异常
    • getPermissions

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

      如果此 URL 的协议是“jar”,则授予的权限基于 Jar 文件的 URL 所需的权限。

      如果协议是“文件”并且有权限组件,则可以授予连接到该权限并接受来自该权限的连接的权限。如果协议是“文件”并且路径指定了一个文件,则授予读取该文件的权限。如果协议是“文件”并且路径是目录,则授予读取所有文件以及(递归地)该目录中包含的所有文件和子目录的权限。

      如果协议不是“文件”,则授予连接到 URL 主机并接受来自 URL 主机的连接的权限。

      重写:
      getPermissions 在类 SecureClassLoader
      参数:
      codesource - 代码源
      返回:
      授予代码源的权限
      抛出:
      NullPointerException - 如果 codesourcenull
    • newInstance

      public static URLClassLoader  newInstance(URL [] urls, ClassLoader  parent)
      为指定的 URL 和父类加载器创建 URLClassLoader 的新实例。如果安装了安全管理器,则此方法返回的 URLClassLoader 的loadClass方法将在加载类之前调用SecurityManager.checkPackageAccess方法。
      参数:
      urls - 用于搜索类和资源的 URL
      parent - 委托的父类加载器
      返回:
      生成的类加载器
      抛出:
      NullPointerException - 如果 urls 或其任何元素是 null
    • newInstance

      public static URLClassLoader  newInstance(URL [] urls)
      为指定的 URL 和默认父类加载器创建 URLClassLoader 的新实例。如果安装了安全管理器,则此方法返回的 URLClassLoader 的loadClass方法将在加载类之前调用SecurityManager.checkPackageAccess
      参数:
      urls - 用于搜索类和资源的 URL
      返回:
      生成的类加载器
      抛出:
      NullPointerException - 如果 urls 或其任何元素是 null