在 Java 中,有几个相关但不同的概念,包括包(Package)、模块(Module)、类(Class)。
下图为IDEA的项目结构介绍
在 Java 9 模块系统中,有以下基本概念:模块(Module)、包(Package)、类(Class)。
-
模块(Module):
- 模块是一种组织和封装代码的方式,引入了
module-info.java
文件来定义模块。 - 模块具有唯一的标识符,称为模块名称,类似于包名的作用,用于在项目中标识和引用模块。
- 模块定义了对其他模块的依赖关系、导出的包和对外提供的服务。
- 模块是一种组织和封装代码的方式,引入了
-
包(Package):
- 包是一种组织类和接口的方式,用于将相关的类和接口组织在一起。
- 包通常用于在代码中建立命名空间,以避免类名冲突。
- 在模块内,包仍然是组织代码的基本单元。
-
类(Class):
- 类是 Java 程序中的基本组成单元,它包含字段、方法等成员。
- 类被组织在包内,可以通过包名和类名唯一标识。
模块、包、类之间的关系:
- 一个模块可以包含多个包,模块定义了对外提供的包和对其他模块的依赖关系。
- 一个包可以包含多个类,包用于组织和命名空间管理类。
- 一个类是 Java 程序中的基本单位,包含成员变量和方法。
目录结构示例:
my-java-project/
├── src/
│ ├── moduleone/
│ │ ├── module-info.java
│ │ ├── com.example.moduleone.api/
│ │ └── ModuleOneApiClass.java
│ │ ├── com.example.moduleone.internal/
│ │ └── ModuleOneInternalClass.java
│ ├── moduletwo/
│ │ ├── module-info.java
│ │ ├── com.example.moduletwo.api/
│ │ └── ModuleTwoApiClass.java
│ │ ├── com.example.moduletwo.internal/
│ │ └── ModuleTwoInternalClass.java
│ ├── mainapp/
│ │ ├── module-info.java
│ │ ├── com.example.mainapp/
│ │ └── MainAppClass.java
└── lib/
├── external-library.jar
在这个示例中:
moduleone
和moduletwo
是两个模块,每个模块内部有一个module-info.java
文件,用于定义模块的元信息。com.example.moduleone.api
和com.example.moduleone.internal
是moduleone
模块内的两个包,分别包含了模块对外提供的 API 和内部类。- 同理,
com.example.moduletwo.api
和com.example.moduletwo.internal
分别是moduletwo
模块内的包。 com.example.mainapp
是主应用程序模块内的包,包含了主应用程序的类MainAppClass.java
。lib
目录包含了外部库external-library.jar
。