Java中的未命名模块
Java模块是一组密切相关的包和资源以及一个新的模块描述符文件。此外,该模块是为重用而设计的包的集合。 Java模块可以识别它包含的哪些Java包应该对使用该模块的其他Java模块可见。是模块化 JAR 文件中的包,其根文件夹中有模块描述符,或者是打包Java应用程序的机制,或者API 分开。
模块类型
类型 1:未命名模块
未命名的模块是在没有模块信息的情况下构建的 JAR。 Java声明。未命名的模块将需要所有其他模块,并且还将导出其所有包。
类型 2:命名模块
命名模块是使用模块声明文件 module-info 创建的模块。 Java在其根文件夹中。该模块有一个名称,它依赖于其他一些模块。这意味着在编译和运行该模块时,必须存在所需的模块,否则可能会出现编译错误或运行时错误。
类型 3:自动模块
自动模块是可以读取所有其他模块的模块,并且所有其他模块也可以读取它,反之亦然。即使是命名模块也可以读取自动模块。自动模块将具有从其 jar 名称派生的模块名称。
在这里,我们将只强调未命名的模块,如下所示:
未命名模块
未命名的模块是没有模块信息的 jar 结构。 Java声明。由于未命名的模块可以渲染所有其他模块,因此在使用Java 9 之前不需要对当前应用程序进行模块化。需要注意的是,未命名的模块导出其整个包并不意味着命名的模块可以访问未命名的模块包。这是因为模块信息中没有办法。 Java声明需要未命名的模块。未命名的模块将需要所有其他模块,并且还将导出其整个包。这为新应用程序使用Java 9 提供了巨大的特权,而Java 9 不允许命名模块读取未命名模块。这只确保其他未命名的模块可以访问其包。
现在让我们列出与介绍它有关的未命名模块的一些用途
- 它导出其所有包并将其所有包打开到所有其他模块。
- 未命名的模块可以访问所有模块中所有导出包中的公共类型。
- 未命名模块中的所有类都可以读取模块路径上找到的所有Java模块导出的所有类。
- 我们可以在运行应用程序时使用Java VM 的-classpath 参数。
执行:
我们将使用Java.lang 内置模块下的Module 类创建一个未命名的模块,然后最后打印模块的名称和描述。
例子:
Java
// Java Program to Get the Name of Unnamed Module
// and The Description of That Module
// Main class
public class GFG_UnnamedModule {
// Main driver method
public static void main(String args[])
{
// Getting the module using getModule() method
Module module = UnnamedModuleTest.class.getModule();
// Printing the name and description of the module
System.out.print("Name of Module is: "
+ module.getName());
System.out.println("Description of module: "
+ module.getDescriptor());
}
}
输出:
Name of Module: is null
Description of module: null