原文: https://beginnersbook.com/2018/09/java-9-modules/

在本文中,我们将学习 Java 9 最重要的特性 - Java 9 模块。我们将涵盖所有内容,例如我们需要模块的原因,什么是模块,如何在 Java 中创建和使用模块。让我们开始吧。

关于模块的小背景

Java 模块系统是 Java 早就应该实现的。模块系统是 Jigsaw 计划的一部分,最初计划在 Java SE 7 中发布但延迟并推迟到 Java SE 8 发布,但又因为它是一个巨大而有声望的项目,它已经从 Java SE8 推迟发布并最终在 Java SE 9 中发布。**

在下一节中,我将从基础知识中进行解释,以便每个人都能理解模块的需求。您可能会发现它是一个巨大的文本墙,但我向您保证,如果您仔细阅读它,您将能够理解模块背后的原因和想法。

为什么我们需要 Java 中的模块?

java 最重要的特性是可重用性,它允许我们在继承接口的帮助下重用我们创建的类。我们可以在继承的帮助下继承类的行为,并且可以使用接口继承抽象。

为了有效地重用这些类,java 将它们分组在中,并且它以这样的方式完成,以便类似类型的类在单个包中。对于例如当我们处理集合时,我们需要的大多数类和接口都在java.util包中。

随着我们的代码大小的增加,java 中的包也增加了。想象一下,使用数百个包来处理一个非常大的程序,在这种情况下,很难理解哪些类正在使用什么。包是组织类的好方法,但我们需要在代码中使用包时组织它们

此外,使类可以在包之间重用的唯一方法是将其公开,当我们公开它时,任何人都可以使用它。这也需要解决。

Java 9 引入了一个很酷的新功能来解决我们上面讨论过的问题。它引入了一个名为“模块”的新功能。 “模块是一组包”。模块不仅可以组织包,还可以处理可访问性,以便可以使用我们想要重用的模块的部分,以及我们不想重用的部分,不能重复使用。

直到现在我们在理论上讨论了所有内容,让我们在代码和图表的帮助下讨论模块。

什么是 Java 9 模块?

模块是一组包。我们在一个模块中有两种类型的包 - 1)导出的包 2)隐藏的包。

导出的软件包:这些软件包旨在在模块外部使用,这意味着任何其他模块中的任何程序都可以使用这些软件包。

隐藏包:这些包不在外面使用,它们在模块内部,只能在模块内部使用。

在 15 分钟内学习 Java 9 模块 - 图1

为了进一步理解导出包和隐藏包的概念,我们举一个java.base模块的例子。

让我们借助下图了解这一点。在下图中,java.base中的绿色块表示“导出的包”,有几个导出的包,但我只提到了其中的一些。绿色块中提到的这些包可以由外部类使用。

黄色块中的包装是隐藏包装,在模块外部无法访问。这些包仅用于模块内部。

在 java 中我们在module-info.java文件中定义模块,并提及任何包作为导出包我们在export关键字之后提到包的名称,如右侧所示(灰色)在下图中阻止。

在 15 分钟内学习 Java 9 模块 - 图2

让我们在 Eclipse IDE 中编写程序并使用模块的概念。

Java 9 模块 - 在 Eclipse IDE 中创建和使用模块

我们将在一个模块中创建一个类,并在另一个模块中使用该类。

1.创建 Java 项目

在 15 分钟内学习 Java 9 模块 - 图3

我们正在 Eclipse IDE 中创建一个 java 项目。我们使用的项目名称是beginnersbook.demo

2.创建module-info.java文件

创建项目后,右键单击项目名称,转到Configure选项,然后单击create module-info.java选项如下截图所示。给出与项目名称beginnersbook.demo相同的模块名称。

在 15 分钟内学习 Java 9 模块 - 图4

现在请将文件留空。我们稍后会来。

3.创建包和类

我们在这个模块中创建了一个类,我们将在另一个模块中使用这个类。我们正在beginnersbook.demo包中创建一个类BeginnersBook

BeginnersBook类的源代码:

  1. package beginnersbook.demo;
  2. public class BeginnersBook {
  3. public String welcomeMessage() {
  4. return "Welcome to BeginnersBook";
  5. }
  6. }

4.导出我们创建的包

由于我们计划在另一个模块中使用BeginnersBook类,因此我们可以将此包导出,以便可以在模块外部使用。为此,请在module-info.java文件:

在 15 分钟内学习 Java 9 模块 - 图5中编写此代码

  1. module beginnersbook.demo {
  2. exports beginnersbook.demo;
  3. }

项目beginnersbook.demo的最终结构如下:

在 15 分钟内学习 Java 9 模块 - 图6

5.让我们创建另一个模块

让我们创建一个新的 java 项目,将其命名为beginnersbook.user,并按照我们上面创建的方式创建module-info.java文件,并将其命名为beginnersbook.user。该项目的module-info.java文件包含以下代码:

  1. //module-info.java file
  2. module beginnersbook.user {
  3. exports beginnersbook.user;
  4. requires beginnersbook.demo;
  5. }

由于我们计划使用beginnersbook.demo包,因此我们在require关键字后面提到了包名,如上面的代码所示。

注意:您很可能会收到一条错误消息,指出包名称未解析,这是因为其他模块不在构建路径中。要解决此错误,请右键单击项目beginnersbook.user,转到Build Path -> 配置构建路径,如以下屏幕截图所示:

在 15 分钟内学习 Java 9 模块 - 图7

转到Projects选项卡,单击Modulepath,然后单击右侧的Add按钮,添加我们创建的上一个 java 项目beginnersbook.demo。你的最终屏幕应如下所示:

在 15 分钟内学习 Java 9 模块 - 图8

您的错误现在应该得到解决。

6.让我们在第二个模块中创建一个类

在包含beginnersbook.user包的项目中创建一个类BeginnersBookUser

BeginnersBookUser类的源代码:

  1. package beginnersbook.user;
  2. import beginnersbook.demo.BeginnersBook;
  3. public class BeginnersBookUser {
  4. public static void main (String arg[]) {
  5. BeginnersBook obj = new BeginnersBook();
  6. System.out.println(obj.welcomeMessage());
  7. }
  8. }

两个项目的最终结构如下:

在 15 分钟内学习 Java 9 模块 - 图9

7.最后一步

让我们运行BeginnersBookUser类,你应该得到以下输出:

  1. Welcome to BeginnersBook

多数民众赞成。为了简要说明,我们在模块中创建了一个类并导出了包,以便可以在模块外部使用该类。
为了测试它,我们在另一个模块中创建了另一个类,并使用了导出的包,最后使用了我们首先创建的类。