我是靠谱客的博主 淡定抽屉,最近开发中收集的这篇文章主要介绍自动模块 未命名模块 java_java11教程--ModuleLayer类,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

Java虚拟机中的一层模块。

从Configuration中的模块图创建图层,并将每个模块映射到ClassLoader 。 创建图层会通知Java虚拟机有关可从模块加载的类,以便Java虚拟机知道每个类所属的模块。

创建图层会为配置中的每个ResolvedModule创建一个模块对象。 对于每个解决模块是read ,所述模块 reads相应的运行时模块 ,其可以是在同一层或parent层。

defineModulesWithOneLoader和defineModulesWithManyLoaders方法提供了创建模块层的便捷方法,其中所有模块都映射到单个类加载器或每个模块映射到其自己的类加载器。 defineModules方法适用于更高级的情况,其中模块通过为方法指定的函数映射到自定义类加载器。 这些方法中的每一个都具有实例和静态变体。 实例方法创建一个以接收者作为父层的图层。 静态方法适用于更高级的情况,其中可以有多个父层,或者需要Controller来控制层中的模块

Java虚拟机至少有一个非空层,即boot层,它是在启动Java虚拟机时创建的。 引导层包含模块java.base并且是Java虚拟机中唯一具有名为“ java.base ”的模块的层。 引导层中的模块映射到Java虚拟机中的引导类加载器和其他类加载器built-in 。 创建其他图层时,引导层通常为parent 。

创建一个层中的每个模块 ,使其输出和opens由其ModuleDescriptor描述的包。 在创建图层时,将按照以下条件确定合格的导出(将包导出到一组目标模块而不是所有模块):

如果模块X将包导出到Y ,并且如果运行时模块 X读取模块 Y ,则将包导出到模块 Y (其可以与X在同一层中或父层)。

如果模块X将包导出到Y ,并且如果运行时模块 X未读取Y则定位目标Y就好像通过调用findModule来查找层或其父层中的模块一样。 如果找到Y ,则将包导出到找到的Y实例。 如果未找到Y则忽略限定导出。

合格的开仓的处理方式与合格的出口相同。

与创建Configuration时Configuration , automatic模块在创建图层时会受到特殊处理。 在Java虚拟机中创建一个自动模块,作为模块 ,读取Java虚拟机中的每个未命名的模块 。

除非另行指定,否则将null参数传递给null中的方法会导致抛出NullPointerException 。

用法示例:

此示例通过解析名为“ myapp ”的模块来创建配置,其中引导层的配置为父级。 然后,它会在此配置中创建一个包含模块的新层。 所有模块都定义为相同的类加载器。

ModuleFinder finder = ModuleFinder.of(dir1, dir2, dir3);

ModuleLayer parent = ModuleLayer.boot();

Configuration cf = parent.configuration().resolve(finder, ModuleFinder.of(), Set.of("myapp"));

ClassLoader scl = ClassLoader.getSystemClassLoader(); ModuleLayer layer = parent.defineModulesWithOneLoader(cf, scl); Class> c = layer.findLoader("myapp").loadClass("app.Main");

方法:

static ModuleLayer boot()

返回引导层。

Configuration configuration()

返回此层的配置。

ModuleLayer defineModules​(Configuration cf, Functionclf)

通过在给定Configuration的Java虚拟机中定义模块,创建一个新的模块层,并将其作为父层。

static ModuleLayer.Controller defineModules​(Configuration cf, ListparentLayers, Functionclf)

通过在给定 Configuration的Java虚拟机中定义模块来创建新的模块层。

ModuleLayer defineModulesWithManyLoaders​(Configuration cf, ClassLoader parentLoader)

通过在给定Configuration的Java虚拟机中定义模块,创建一个新的模块层,并将其作为父层。

static ModuleLayer.Controller defineModulesWithManyLoaders​(Configuration cf, ListparentLayers, ClassLoader parentLoader)

通过在给定 Configuration的Java虚拟机中定义模块来创建新的模块层。

ModuleLayer defineModulesWithOneLoader​(Configuration cf, ClassLoader parentLoader)

通过在给定Configuration的Java虚拟机中定义模块,创建一个新的模块层,并将其作为父层。

static ModuleLayer.Controller defineModulesWithOneLoader​(Configuration cf, ListparentLayers, ClassLoader parentLoader)

通过在给定 Configuration的Java虚拟机中定义模块来创建新的模块层。

static ModuleLayer empty()

返回空层。

ClassLoader findLoader​(String name)

返回ClassLoader具有给定名称的模块的。

OptionalfindModule​(String name)

返回该层中具有给定名称的模块,如果不在此层中,则返回父层。

Setmodules()

返回此层中的模块集。

Listparents()

返回该层的父级列表,除非这是没有父级的 空层,因此返回一个空列表。

String toString()

返回描述此模块层的字符串。

最后

以上就是淡定抽屉为你收集整理的自动模块 未命名模块 java_java11教程--ModuleLayer类的全部内容,希望文章能够帮你解决自动模块 未命名模块 java_java11教程--ModuleLayer类所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(73)

评论列表共有 0 条评论

立即
投稿
返回
顶部