Module  java.base
软件包  java.net

Class URLClassLoader

  • All Implemented Interfaces:
    CloseableAutoCloseable
    已知直接子类:
    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
    • 构造方法详细信息

      • URLClassLoader

        public URLClassLoader​(URL[] urls,
                              ClassLoader parent)
        为给定的URL构造一个新的URLClassLoader。 在首次搜索指定的父类加载器后,将按照为类和资源指定的顺序搜索URL。 假定任何jar:方案URL是指JAR文件。 以“/”结尾的任何file:方案URL假定是指一个目录。 否则,URL被认为是指根据需要下载并打开的JAR文件。

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

        参数
        urls - 加载类和资源的URL
        parent - 用于委派的父类加载器
        异常
        SecurityException - 如果安全管理器存在,并且其 checkCreateClassLoader方法不允许创建类加载器。
        NullPointerException - 如果 urlsnull
        另请参见:
        SecurityManager.checkCreateClassLoader()
      • URLClassLoader

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

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

        参数
        urls - 加载类和资源的URL
        异常
        SecurityException - 如果安全管理器存在,并且其 checkCreateClassLoader方法不允许创建类加载器。
        NullPointerException - 如果 urlsnull
        另请参见:
        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 - 如果 urlsnull
        另请参见:
        SecurityManager.checkCreateClassLoader()
      • URLClassLoader

        public URLClassLoader​(String name,
                              URL[] urls,
                              ClassLoader parent)
        为指定的URL构造一个新的命名为URLClassLoader 在首次搜索指定的父类加载器后,将按照为类和资源指定的顺序搜索URL。 任何以“/”结尾的URL都假定是指一个目录。 否则,URL被认为是指根据需要下载并打开的JAR文件。
        参数
        name - 类加载器名称; null如果没有命名
        urls - 加载类和资源的URL
        parent - 用于委派的父类加载器
        异常
        IllegalArgumentException - 如果给定的名称为空。
        NullPointerException - 如果 urlsnull
        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 - 如果 urlsnull
        SecurityException - 如果存在安全管理员,并且其 checkCreateClassLoader方法不允许创建类加载器。
        从以下版本开始:
        9
    • 方法详细信息

      • 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的搜索路径。
      • 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搜索路径上查找具有指定名称的资源。
        重写:
        findResourceClassLoader
        参数
        name - 资源的名称
        结果
        一个 URL的资源,或 null如果资源无法找到,或者如果装载程序关闭。
      • findResources

        public Enumeration<URL> findResources​(String name)
                                       throws IOException
        返回表示URL搜索路径上具有指定名称的所有资源的URL的枚举。
        重写:
        findResourcesClassLoader
        参数
        name - 资源名称
        结果
        一个 EnumerationURL s如果加载程序关闭,枚举将为空。
        异常
        IOException - 如果发生I / O异常
      • getPermissions

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

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

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

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

        重写:
        getPermissionsSecureClassLoader
        参数
        codesource - 代码源
        结果
        授予代码源的权限
        异常
        NullPointerException - 如果 codesourcenull
      • newInstance

        public static URLClassLoader newInstance​(URL[] urls,
                                                 ClassLoader parent)
        为指定的URL和父类加载器创建URLClassLoader的新实例。 如果安装了安全管理器,该loadClass的URLClassLoader的方法此方法返回的将调用SecurityManager.checkPackageAccess加载类方法之前。
        参数
        urls - 搜索类和资源的URL
        parent - 用于委派的父类加载器
        结果
        生成的类加载器
        异常
        NullPointerException - 如果 urlsnull
      • newInstance

        public static URLClassLoader newInstance​(URL[] urls)
        为指定的URL和默认父类加载器创建URLClassLoader的新实例。 如果安装了安全管理器,该loadClass的URLClassLoader的方法此方法返回的将调用SecurityManager.checkPackageAccess加载类之前。
        参数
        urls - 搜索课程和资源的URL
        结果
        生成的类加载器
        异常
        NullPointerException - 如果 urlsnull