Java的模块是Java9正式实现的,一直没时间研究这个东西。今天就和大家一起学习这个功能。Java模块解决了什么问题?最近有很多同学问我,胖哥,我应该怎么学?我应该学习什么?胖哥也穿插在这里。不管学什么,首先要搞清楚学习有什么用,是学了马上用还是以后有用。我觉得在时间有限的情况下,一定要学一些立马有用的东西。接下来,我们就来看看Java模块的用处吧。我觉得模块化最大的意义就是把代码逻辑按照功能分离出来,就像你做前端,我写后端,他做测试,把整体的大概念拆分成小概念,自由自在使用时结合它们,按需引用它们。其实它确实有这方面的作用,但不仅仅是那么多。简化类库JDK的类库目前过于臃肿,在某些微型设备上可能无法使用所有的功能,但在目前的情况下,所有的类库都不得不引用。Java9引入模块功能后,JDK、JRE、甚至JAR都可以排除不用的类库,大大减少依赖库的大小。真正的访问隔离是只要类之前是public的,就可以在整个依赖传递的范围内直接访问。但是很多时候我们需要把一些类的访问限制在一定范围内,让这些类有一些封闭性。我们可以在导入模块后执行此操作,安全地隐藏一些我们不想公开的内部实现细节。什么是模块?Java9引入的模块是在Java包的基础上引入的新的抽象层。基于包很重要,这里需要强调一下。模块结构Java模块可以由一个或多个组合在一起的Java包组成。结构可以参考下图:创建模块创建模块需要以下步骤:创建文件夹,一般是包名,如cn.felord.module。然后在cn.felord.module下创建一个module-info.java文件,称为模块描述符文件。在与模块描述符文件相同的级别创建Java包。最后,只需在创建的包下编写您的Java类文件即可。创建模块的规则创建模块还必须遵守以下规则:模块名称必须是唯一的。模块描述符文件module-info.java必须存在。包名称必须是唯一的。即使在不同的模块中,我们也不能有相同的包名。每个模块都会创建一个jar文件。对于多个jar,我们需要创建单独的模块。一个项目可以包含多个模块。模块类型模块也有类型,一共有四种。系统模块是来自JDK和JRE的模块。您可以使用java--list-modules来列出,这里是一部分:?.\java.exe--list-modulesjava.base@17java.compiler@17java.datatransfer@17java.desktop@17java.instrument@17java.logging@17java.management@17java.management.rmi@17#省略...应用模块都是在应用程序中创建的实现功能的模块。如果日常开发中涉及到的模块,应该属于这一类。自动模块化现有的jar文件,感觉就像与旧类库的兼容性。它们实际上不是模块。当我们将非模块jar添加到模块路径时,将创建一个具有该jar名称的模块。该模块具有以下属性:默认情况下导出所有包。默认情况下可以访问所有其他模块的类。未命名模块添加到类路径的jar和类。当我们将jar或类添加到类路径时,所有这些类都添加到未命名模块中,仅导出到其他未命名模块和自动模块。这意味着,应用程序模块无法访问这些类。它可以访问所有模块的类。模块描述符文件对于一个模块只有一个module-info.java,并且有格式要求。让我们找出来。声明一个模块,我们只需要在module-info.java中这样声明一个名为cn.felord的模块:modulecn.felord{}模块名要超过两个单词,以英文句点分隔。上面是一个空模块。默认情况下,模块中的所有包都是私有的,即使外部依赖项也无法访问。模块内的包遵循前面的规则,不受模块的影响。我们可以使用export关键字公开特定的包,如下所示:modulecn.felord{exportscn.felord.pkg;exportscn.felord.util;}注意cn.felord.pkg和exportscn.felord.util不能是空包,导出的包必须声明Java对象。无法导出具体的Java类。还有一种定向导出包,只暴露给某个模块。就像特制的酒和香烟。它的语法是:exports
