Java的模块(module)

news2024/12/24 8:58:04

简单介绍

Java的模块(module)是Java SE 9支持的组件。一个模块可以包含多个包。通过模块系统,更加容易开发和维护大型的系统。引入模块的目标:

  • 提供一种可靠的配置机制。用模块机制替换脆弱的、容易出错的类路径配置机制。模块作为一个程序组件,可以明确地指明对其它模块的依赖关系。
  • 强的封装性。一个程序组件可以明确指明它哪些公开类型可以被其它的组件访问,哪些不能。

一个模块的信息放在module-info.java文件中,每个模块一个这样的文件,放在每个模块的根路径下面。这个文件包含的主要内容:

  • 模块的声明(用module关键字)
  • 对其它模块的依赖(用requires 指令)
  • 本模块向外暴露的包(用exports或者opens 指令)
  • 本模块消费的服务(用uses 指令)
  • 本模块提供的服务(用provides 指令)

例如,下面java.base是JDK的一个模块,模块里面包含了多个包:
在这里插入图片描述
下面截取了官网上java.base模块的帮助文档的片段,帮助直观地理解:
https://docs.oracle.com/en/java/javase/19/docs/api/java.base/module-summary.html
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

官网参考资源

https://openjdk.org/projects/jigsaw/
https://openjdk.org/jeps/261
https://openjdk.org/projects/jigsaw/spec/sotms/
https://openjdk.org/projects/jigsaw/quick-start
https://docs.oracle.com/javase/specs/jls/se19/html/jls-7.html#jls-7.7

示例

只有一个模块、一个包的简单示例

按照惯例,模块包含的源代码存放在以模块的名字作为目录名的目录中。
例如模块的名字为thb.base,其中包含了一个包com.thb,在我机器上源代码物理路径结构:
在这里插入图片描述
module-info.java文件的内容如下:

module thb.base {
	
}

HelloModule.java文件的内容如下:

package com.thb;

public class HelloModule {

	public static void main(String[] args) {
		System.out.println("Hello Module!");
	}

}

下面来编译:
在cmd命令窗口,切换到D:\temp\eclipse-workspace\java_work\java_module_demo目录下面,执行命令:

javac -d D:\temp\java_module_output\thb.base src\thb.base\module-info.java src\thb.base\com\thb\HelloModule.java

在这里插入图片描述

上面命令中,-d D:\temp\java_module_output\thb.base指定了编译输出文件的存放路径是D:\temp\java_module_output\thb.base。
后面指明了两个待编译的java源文件,此处用的相对路径。当然,用绝对路径也行。
编译后的输出:
在这里插入图片描述

下面来执行:
切换到d:\temp目录下面,执行如下命令:

java --module-path java_module_output -m thb.base/com.thb.HelloModule

其中–module-path java_module_output 指明了存放模块的路径是java_module_output ,-m thb.base/com.thb.HelloModule指明了主模块是thb.base,斜杠(/)后面的值指定了模块中的主类。
执行输出:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/702198.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

物化视图功能验证

物化视图(Materialized View)和视图(View)类似,也是一个视图名字对应一个SQL查询查询语句。不同之处在于:物化视图定义时使用了额外的关键字materialized, 它把结果集保存在起来,查询的时候直接读取保存的结果集,而不必…

力扣单调栈专题 739. 每日温度 496.下一个更大元素I 503.下一个更大元素II 42. 接雨水 84.柱状图中最大的矩形 步骤及C++实现 总结

文章目录 739. 每日温度496.下一个更大元素 I503.下一个更大元素II方法一 数组拼接方法二 模拟遍历两边nums 42. 接雨水双指针 暴力法双指针优化单调栈 84.柱状图中最大的矩形暴力解法双指针解法单调栈 总结 739. 每日温度 暴力解法,双层for循环,时间复杂…

「完美解决」concrt140.dll丢失怎么恢复(解决方案)

我们平时在打开 Adobe 应用程序、Halo、Forza Horizon 5 等时,可能会遇到找不到 concrt140.dll。因此,这不是特定于某个应用程序的问题。如果没有安装正确的 DLL,应用程序将无法正常工作,因为它们的代码依赖于这些库中编写的代码。…

C++入门笔记--【精简完备】【快速入手】

目录 ​​​​​​​1 C初识 1.1 第一个C程序 1.1.1 创建项目 1.1.2 创建文件 1.1.3 编写代码 1.1.4 运行程序 1.2 注释 1.3 变量 1.4 常量 1.5 关键字 1.6 标识符命名规则 2 数据类型 2.1 整型 2.2 sizeof关键字 2.3 实型(浮点型) 2.4 字…

基于STM32单片机的大棚温度测控系统

目录 基于STM32单片机的大棚温度测控系统一、原理图二、部分代码三、视频演示 基于STM32单片机的大棚温度测控系统 功能: 1.通过LCD屏幕显示温湿度值和上限阈值 2.通过按键完成阈值加减功能 3.通过DHT11完成温湿度采集 4.若实时数据不满足条件,则进行降…

linux curl命令使用教程(curl指令)

文章目录 curl指令介绍curl的历史curl指令的安装Ubuntu/DebianCentOS/RHELFedoramacOSWindows curl使用方法示例使用curl命令注意事项 curl指令介绍 curl是一个用于发送HTTP请求的命令行工具,它支持多种协议,包括HTTP、HTTPS、FTP、SMTP等。curl可以用来…

人工智能:揭示未来科技所带来的革命性变革

目录 引言: 一、人工智能的定义与发展历程: 二、人工智能的应用领域: 三、人工智能对未来的影响: 结论: 引言: 在当今科技快速发展的时代,人工智能(Artificial Intelligence&am…

开展全媒体营销的具体步骤和策略

随着移动互联网的发展和智能手机的普及,网络营销的主战场从PC端向移动端转移,新型的全媒体营销就是在如此的背景下兴起且被广泛应用。全媒体营销强调的是通过多个平台和渠道传播信息,与目标受众进行全方位、多角度的沟通。 企业如何高效开展全…

1σ Random Jitter of SSB for TIE Period

1σ Random Jitter of SSB for TIE & Period ,该章节厘清了jitter基本概念,并给出了对应的表达式。

FineReport学习4

通过按钮控件来实现插入删除行 通过sql公式实现填报联动 设置插入行策略 通过sql实现控件联动

数据结构---------(2)排序

排序 1.选择排序 从待排序的数据中选择最小的元素,将其放在已排序的序列末尾,然后在剩余的数据中再选择最小的元素,放在已排序序列的末尾,以此类推,直到所有的数据都排好序为止。 public static void main(String[…

大数据分析案例-基于KMeans聚类算法对客户进行分群分析

🤵‍♂️ 个人主页:艾派森的个人主页 ✍🏻作者简介:Python学习者 🐋 希望大家多多支持,我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 💬点赞&#x1f4…

【GESP】2023年03月图形化二级 -- 绘制图形

文章目录 绘制图形1. 准备工作2. 功能实现3. 设计思路与实现(1)角色、舞台背景设置a. 角色设置b. 舞台背景设置 (2)脚本编写a. 角色:小猫 4. 评分标准 绘制图形 1. 准备工作 (1) 隐藏默认角色小猫。 2. 功…

【Redis入门】 —— 关于Redis的一点儿知识

💧 【 R e d i s 入门】——关于 R e d i s 的一点儿知识 \color{#FF1493}{【Redis入门】 —— 关于Redis的一点儿知识} 【Redis入门】——关于Redis的一点儿知识💧 🌷 仰望天空,妳我亦是行人.✨ 🦄 个人主页…

2023年华中杯数学建模B题小学数学应用题相似性度量及难度评估解题全过程文档及程序

2023年华中杯数学建模 B题 小学数学应用题相似性度量及难度评估 原题再现 某 MOOC 在线教育平台希望能够进行个性化教学,实现用户自主学习。在用户学习时,系统从题库中随机抽取若干道与例题同步的随堂测试题,记录、分析学生的学习和答题信息…

深入Vite:再谈ESM的高阶特性

谈到前端模块化的发展历史,就一定不会漏掉ESM,除此之外,还有大家熟知的CommonJS、AMD、CMD以及ES6等。目前, ESM 已经逐步得到各大浏览器厂商以及 Node.js 的原生支持,正在成为主流前端模块化方案。 而 Vite 本身就是…

chatgpt赋能python:Python除零错误:原因,解决办法和实践建议

Python 除零错误:原因,解决办法和实践建议 介绍 Python 作为一门广泛使用的高级编程语言,它的强大之处就体现在它的简洁性、可读性和易用性上。但是在实践中,有时候我们会遇到一些让我们不得不头痛的问题,其中之一就…

(0017) H5-vue创建项目vue init webpack

1、初始化项目 1、vue 命令讲解 vue list &#xff1a;查看可以基于那些模板创建vue应用vue init <template-name> <project-name>init&#xff1a;表示要用vue-cli来初始化项目 <template-name>&#xff1a;表示模板名称&#xff0c;vue-cli官方提供的5种…

【LeetCode】218. 天际线问题

218. 天际线问题&#xff08;困难&#xff09; 思路 题意转化 完整思路分析 multiset的使用 multiset 是关联容器的一种&#xff0c;是排序好的集合&#xff08;元素默认升序&#xff09;&#xff0c;并且允许有相同的元素。 不能直接修改 multiset 容器中元素的值。因…

柯美658 558 458 308 554 364等报错故障代码C2152,C2153,C2154,C2155,C2156 C2253.C2254维修

代码基本都是转印带故障代码,转印带有两个传感器是检测转印带工作和没有工作时加压有没有归位的,传感器基本不会坏,更多的情况是因为转印带上的废粉落在了传感器上导致传感器故障,清洁即可。