Java中的模块(Module)入门介绍

Java中的模块(Module)入门介绍

在Java 9版本中Java 语言引入了一个非常重要的概念:模块(module)。module引入了Java代码分组的另一个级别。每个module都包含许多子package(包)。模块是一组密切相关的包和资源以及一个新的模块描述符文件。

【Java和Python中的包和模块

Python模块(Modules),本质上是一个Python程序,以.py作为文件后缀。任何py文件都可以作为一个模块(Modules)。通过使用模块,不仅可以有效地避免命名空间的冲突,还可以将一个较大的程序分为多个文件,提升代码的可维护性和可重用性。

Python包(Package)的概念,特别在稍大型的项目中常常需要编写、用到大量的模块,此时可以使用包(Package)来管理这些模块,它实质上是一个目录(directory)。

Java文件是按照Java包的结构组织起来的,Java中的包通常包含相关的类,映射的实体概念是目录(directory),Java文件对应的目录结构层次要和包的结构层次一致。编译后的.class文件也需要按照包结构存放。Java 9 引入的模块(Module)是在Java包(package)的基础上又引入的一个新的抽象层。

关于Java中的包可参见 https://blog.csdn.net/cnds123/article/details/80446981

 Java中的package是Java中的基本组织单位, 每个包中包含Java类和接口文件。Java 9 引入的模块(Module)是在Java包(package)的基础上又引入的一个新的抽象层,是一组唯一命名(uniquely named)、可重用的相关包(packages)、资源(如图像和XML文件)和一个模块描述符(module descriptor)。模块类似于jar文件,因为两者都是一组包。两者之间的区别在于,模块包含元数据,即配置信息。模块的配置信息在一个名为 module-info.java 的特殊文件中指定。

模块描述符包含以下信息:

模块的名字——模块名称的声明

模块的依赖关系

它显式地向其他模块提供的包

它提供的服务

它所使用的服务

允许反射到的其他模块

模块名称的声明

一个模块的自描述表现在它的模块声明中,它是java程序语言中的一个新的结构,最简单的可能的模块声明仅仅是指定模块的名字,如:

module com.foo.bar { }

其中,com.foo.bar是模块名称。

使用模块化编程的一个java项目通常含三个子目录:lib,mods和src,其中src目录用于保存源代码; mods目录将已编译的代码保存在展开的目录层次结构中;在编译源代码之后,将其打包成一个模块化的JAR并将其存储在lib目录中。 可以使用模块化JAR来运行程序,也可以将模块JAR提供给可以运行程序的其他开发人员。

下面是含有两个模块“ common.widget”和“ data.widget”的项目示意,放置在文件夹“src”下。文件“ module-info.java”将放置在每个模块的根文件夹下。

其文件及目录格式示意如下:

模块命名规则类似于我们命名包的方式(允许点)。模块名外观和包名类似, 但和包不同,模块并不保存在对应的目录下,而是保存在与模块同名的目录下,比如common.widget模块保存在common.widget目录下,而不是common\widget目录下。模块名需要和所在的子目录同名的吗?建议相同(方便用javac编译多个模块,将有一些选项可一次编译多个模块的源代码)但非必须。上图示例中相同。

模块名和包名需要相同吗?否, 也可以选择所需的任何其他包名称。上图示例中就不相同,下面的例子模块名和包名称相同。


模块之间关系:可读性,使用Requires、Exports表示,更多情况可见https://www.cnblogs.com/zimug/p/13855837.html


下面给出一个使用模块的简单例子

改编自 https://www.runoob.com/java/java9-module-system.html

创建一个 com.test 的模块。

第一步

创建文件夹 D:\>JAVA\src,然后在该目录下再创建与模块名相同的文件夹 com.test。

第二步

在 D:\>JAVA\src\com.test 目录下创建 module-info.java 文件,代码如下:

module com.test { }

这一步我们创建了 com.test 模块。

第三步

在模块中添加源代码文件,在目录 D:\>JAVA\src\com.test\com\test 中创建文件 Java9Tester.java,代码如下:

package com.test;

public class Java9Tester {

   public static void main(String[] args) {

      System.out.println("Hello World!");

   }

}

第四步

创建文件夹 D:\>JAVA\mods,然后在该目录下创建 com.test 文件夹,编译模块到这个目录下。操作如下:

打开cmd,先使用cd /d D:\JAVA,切换到D:\JAVA目录,再输入如下命令编译模块

javac -d mods/com.test  src/com.test/module-info.java  src/com.test/com/test/Java9Tester.java

第五步

执行模块,输入如下命令查看输出结果:

java --module-path mods -m com.test/com.test.Java9Tester

其中,module-path 指定了模块所在的路径。

-m 指定主要模块。

输出:

Hello World!

第四步和第五步,可参见下图:

此示例比较简单,目的是让新手对如何使用模块有个感性认识。

进一步学习

https://www.jb51.net/article/242134.htm

Java基础-模块系统笔记(1) - SegmentFault 思否

Java 9 揭秘(2. 模块化系统) - 林本托 - 博客园

Java 9 揭秘(3. 创建你的第一个模块) - 林本托 - 博客园

Java9模块化遇坑-阿里云开发者社区

  • 17
    点赞
  • 64
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 在Python,我们可以使用import语句来导入模块模块是一个包含Python代码的文件,可以包含函数、类、变量等。导入模块可以让我们在程序使用模块定义的函数、类、变量等。 Python有三种导入模块的方式: 1. import module_name:导入整个模块,使用时需要加上模块名前缀。 2. from module_name import function_name:导入模块的某个函数,使用时不需要加上模块名前缀。 3. from module_name import *:导入模块的所有函数和变量,使用时不需要加上模块名前缀,但可能会导致命名冲突。 ### 回答2: Python是一种模块化的编程语言,使用模块可以使代码更加简洁、可维护和可重用。Module模块是Python程序最基本的组成部分之一,它是一个包含定义和语句的Python文件,用于实现特定的功能或者提供特定的服务。在这篇文章,我们将介绍Pythonmodule模块的导入。 Pythonmodule模块的导入可以使用import关键字来实现,通过导入模块,我们可以使用其定义的函数、类、变量、常量等。Python有内置的模块和外部的第三方模块,而且我们也可以自己编写自己的模块。 首先我们来介绍一下Python最常见的模块导入方式——import语句。使用import语句可以将一个模块导入到当前模块,并且可以使用其的函数、类、变量等。具体的语法如下: ``` import module_name ``` 其module_name是要导入的模块名称。使用import语句导入模块后,我们可以通过module_name来访问其的函数、类、变量等。 除了使用import语句导入整个模块之外,我们还可以使用from...import语句来导入模块的特定函数、类、变量等。具体的语法如下: ``` from module_name import name1, name2, name3, ... ``` 其module_name是要导入的模块名称,name1、name2、name3等是要导入的函数、类、变量等名称。使用from...import语句导入模块的特定函数、类、变量等后,我们可以直接使用其名称来调用或者使用。 另外,还有一种导入方式是使用as关键字给导入的模块指定别名,这样可以方便我们调用使用。具体的语法如下: ``` import module_name as alias_name ``` 其module_name是要导入的模块名称,alias_name是指定的别名。使用as关键字导入模块并指定别名后,我们就可以使用别名来访问其的函数、类、变量等了。 除了上述几种常见的模块导入方式之外,还有其他的一些导入方式,比如使用__import__()函数动态导入模块、使用imp库等。 总的来说,Pythonmodule模块的导入非常灵活和方便,使用合适的导入方式可以帮助我们编写出更为简洁、高效、可维护和可重用的Python代码。 ### 回答3: 在Python模块是指一个存放着Python函数、类或变量的文件,而一个包则是包含了多个模块的文件夹。当我们想要在当前代码文件使用另外一个模块的函数或变量时,我们需要使用import语句将其导入。 在Python,有几种导入模块的方式: 1. 直接导入模块 使用import语句直接将整个模块导入到当前代码,例如: ``` import math ``` 这样我们就可以使用math模块所有的函数和变量了,例如: ``` print(math.pi) # 3.141592653589793 ``` 2. 导入模块的特定函数或变量 如果我们只需要导入某个模块的一部分函数或变量,可以使用from...import语句,例如: ``` from math import pi, sqrt ``` 这样我们就只导入了math模块的pi和sqrt函数。如果需要导入多个函数或变量,则可以像这样使用逗号隔开: ``` from math import pi, sqrt, sin, cos ``` 3. 为导入的模块或函数定义别名 在一些情况下,我们可能需要将导入的模块或函数定义为别名,以便更容易地使用它,例如: ``` import numpy as np ``` 这里我们将numpy模块定义为np别名,以便使用更加简洁。 4. 导入包模块或子包 如果我们需要导入一个包模块或子包,可以使用import语句,例如: ``` import mypackage.mymodule ``` 这样我们就可以使用mypackage包的mymodule模块了。如果需要导入多个模块,可以像这样: ``` import mypackage.mymodule1 import mypackage.mymodule2 ``` 或者使用from...import语句: ``` from mypackage import mymodule1, mymodule2 ``` 总的来说,Python模块导入机制非常灵活和强大,能够帮助我们更方便地管理代码和模块,提高代码的可读性和可维护性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

学习&实践爱好者

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值