模块  java.base
软件包  java.net

Class URLClassLoader

  • 实现的所有接口
    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 - 如果 urls或其任何元素是 null
        另请参见:
        SecurityManager.checkCreateClassLoader()
      • URLClassLoader

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

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

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

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

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

        参数
        urls - 从中加载类和资源的URL
        parent - 用于委派的父类加载器
        factory - 创建URL时使用的URLStreamHandlerFactory
        异常
        SecurityException - 如果存在安全管理器且其 checkCreateClassLoader方法不允许创建类加载器。
        NullPointerException - 如果 urls或其任何元素为 null
        另请参见:
        SecurityManager.checkCreateClassLoader()
      • 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参数将用作委托的父类加载器。 factory参数将用作流处理程序工厂,以在创建新的jar URL时获取协议处理程序。
        参数
        name - 类加载器名称; null如果没有命名
        urls - 从中加载类和资源的URL
        parent - 用于委派的父类加载器
        factory - 创建URL时使用的URLStreamHandlerFactory
        异常
        IllegalArgumentException - 如果给定名称为空。
        NullPointerException - 如果 urls或其任何元素是 null
        SecurityException - 如果存在安全管理器且其 checkCreateClassLoader方法不允许创建类加载器。
        从以下版本开始:
        9
    • 方法详细信息

      • close

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

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

        该方法尽最大努力尝试关闭所有打开的文件,在内部捕获IOException 未捕获未经检查的异常和错误。 在已经关闭的加载器上调用close无效。

        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搜索路径中查找具有指定名称的资源。
        重写:
        findResource在类 ClassLoader
        参数
        name - 资源的名称
        结果
        一个 URL的资源,或 null如果资源不能被发现,或者如果加载器关闭。
      • findResources

        public Enumeration<URL> findResources​(String name)
                                       throws IOException
        返回表示具有指定名称的URL搜索路径上的所有资源的URL枚举。
        重写:
        findResourcesClassLoader
        参数
        name - 资源名称
        结果
        Enumeration of URL s。 如果加载程序已关闭,则枚举不包含任何元素。
        异常
        IOException - 如果发生I / O异常
      • getPermissions

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

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

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

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

        重写:
        getPermissions在类 SecureClassLoader
        参数
        codesource - codesource
        结果
        授予codesource的权限
        异常
        NullPointerException - 如果 codesourcenull
      • newInstance

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

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