尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
Java模块化编程实战指南
这是一个演示 Java 9 模块化编程逐步演进的示例程序。要成功执行你需要按照模块化项目的结构来组织代码和编译运行。项目结构与模块划分整个程序涉及多个模块其依赖关系如下模块名称描述依赖关系关键导出/声明appfuncs核心数学函数模块依赖appsupport(Listing 9)导出appfuncs.simplefuncs包appsupport支持函数模块无导出appsupport.supportfuncs包appstart主应用程序模块依赖appfuncs,userfuncs(Listing 20)uses服务接口BinFuncProvideruserfuncs用户函数接口模块无导出userfuncs.binaryfuncs包userfuncsimp用户函数实现模块依赖userfuncs(Listing 18)provides服务实现AbsPlusProvider,AbsMinusProvider执行步骤1. 创建目录结构按照模块名创建对应的目录并将.java文件放入正确的包路径下。# 项目根目录 (例如/java-module-demo) ├── appsupport │ └── src │ └── appsupport │ ├── module-info.java # Listing 7的内容 │ └── appsupport │ └── supportfuncs │ └── SupportFuncs.java # Listing 6 的内容 ├── appfuncs │ └── src │ └── appfuncs │ ├── module-info.java # Listing 9 的内容 (最终版) │ └── appfuncs │ └── simplefuncs │ └── SimpleMathFuncs.java # Listing 8 的内容 (最终版) ├── userfuncs │ └── src │ └── userfuncs │ ├── module-info.java # Listing 17 的内容 │ └── userfuncs │ └── binaryfuncs │ ├── BinaryFunc.java # Listing 11的内容 │ └── BinFuncProvider.java # Listing 12 的内容 ├── userfuncsimp │ └── src │ └── userfuncsimp │ ├── module-info.java # Listing 18 的内容 │ └── userfuncsimp │ └── binaryfuncsimp │ ├── AbsPlus.java # Listing 13 的内容 │ ├── AbsMinus.java # Listing 14 的内容 │ ├── AbsPlusProvider.java # Listing 15 的内容 │ └── AbsMinusProvider.java # Listing 16 的内容└── appstart └── src └── appstart ├── module-info.java # Listing 20 的内容 (最终版) └── appstart └── mymodappdemo └── MyModAppDemo.java # Listing 19 的内容 (最终版)2. 编译模块必须按照模块间的依赖顺序进行编译。先编译被依赖的模块。# 在项目根目录下执行 # 1. 编译 appsupport模块 javac -d out/appsupport \ appsupport/src/appsupport/module-info.java \ appsupport/src/appsupport/appsupport/supportfuncs/SupportFuncs.java # 2. 编译 userfuncs 模块 javac -d out/userfuncs \ userfuncs/src/userfuncs/module-info.java \ userfuncs/src/userfuncs/userfuncs/binaryfuncs/*.java # 3. 编译 userfuncsimp 模块 (依赖 userfuncs) javac --module-path out -d out/userfuncsimp \ userfuncsimp/src/userfuncsimp/module-info.java \ userfuncsimp/src/userfuncsimp/userfuncsimp/binaryfuncsimp/*.java # 4. 编译 appfuncs 模块 (依赖 appsupport) javac --module-path out -d out/appfuncs \ appfuncs/src/appfuncs/module-info.java \ appfuncs/src/appfuncs/appfuncs/simplefuncs/SimpleMathFuncs.java # 5. 编译 appstart 模块 (依赖 appfuncs, userfuncs) javac --module-path out -d out/appstart \ appstart/src/appstart/module-info.java \ appstart/src/appstart/appstart/mymodappdemo/MyModAppDemo.java3. 运行程序使用java命令并指定模块路径和主模块/主类 。java --module-path out -m appstart/appstart.mymodappdemo.MyModAppDemo4. 预期输出如果一切配置正确程序将输出以下结果2 is a factor of 10 Smallest factor common to both 35 and 105 is 5 Largest factor common to both 35 and 105 is 7 Result of absPlus function: 16 Result of absMinus function: 8核心概念解析模块声明 (module-info.java)每个模块的根目录下必须有此文件用于定义模块名、依赖 (requires)、导出包 (exports) 和服务声明 (provides...with/uses) 。封装性未被exports的包在模块外不可见增强了代码的封装性和安全性 。服务与提供者这是 Java 模块化中的高级特性。userfuncs模块定义了服务接口 (BinaryFunc,BinFuncProvider)userfuncsimp模块提供了具体实现appstart模块通过ServiceLoader动态发现和使用这些服务实现了松耦合 。传递依赖 (requires transitive)在appfuncs的模块声明中requires transitive appsupport;使得依赖appfuncs的模块如appstart也能自动访问appsupport模块的内容无需再次声明 。参考来源java9模块化编程示例解释Java的模块化系统以及如何在项目中应用模块化Java模块化编程的艺术揭开模块化世界的面纱Java编程实践与模块化编程的探索Java模块化
RELATED

相关推荐

网上公证办理指南:足不出户如何完成公证?

网上公证办理指南:足不出户如何完成公证?

很多人有公证需求时,反应是抽空前往线下公证处。上班族需要请假、异地人群要长途赶路,准备好材料赶到现场,还会因为资料缺失、格式不符被退回,反复来回耗费大量时间。遇上留学签证、房产委托等有明确时限的事项,多次奔…

📅 2026/9/12 5:40:15
2026年最新!3款好用的课堂英语教学软件推荐

2026年最新!3款好用的课堂英语教学软件推荐

【摘要:】本文结合我5年英语教学工具测评经验,整理2026年3款实测好用的课堂英语教学软件,从技术架构、落地效果、适配场景三个维度拆解,无广告无推广,都是一线老师真实使用反馈,帮大家避开无效工具的坑。我…

📅 2026/9/16 11:07:01
百考通AI充分考量:数据智能生成,覆盖全场景需求

百考通AI充分考量:数据智能生成,覆盖全场景需求

在数字化时代,数据分析已成为学术研究、商业决策与项目推进的核心能力,但复杂的分析逻辑、繁琐的报告撰写常常让非专业人士望而却步。百考通AI(https://www.baikaotongai.com)凭借专业化的数据分析功能,为广大学子、职…

📅 2026/9/1 11:08:09
MORE NEWS

更多资讯

📰

Marchand巴伦设计指南:从原理、ADS仿真到PCB实现与调试

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

用NanoVNA调NFC天线匹配:从S11到读卡距离全面提升

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

鸿蒙开发:ArrayList,可不会让UI更新哦

前言有同学遇到了一个问题&#xff0c;他是使用ArrayList来存储的数据&#xff0c;在动态给集合添加数据后&#xff0c;UI并未更新&#xff0c;代码如下&#xff1a;import { ArrayList } from kit.ArkTS;Entry Component struct Index {State numItems: ArrayList<string&g…

📰

STM32不掉电时钟方案:DS1302+纽扣电池实战记录

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

Kornia 修复四元数奇点处 NaN/Inf 梯度:`quaternion_exp_to_log` 与 `euler_from_quaternion` 的边界防护实现解析

计算机视觉人工智能深度学习图像处理 【免费下载链接】kornia &#x1f40d; Geometric Computer Vision Library for Spatial AI 项目地址&#xff1a; https://gitcode.com/gh_mirrors/ko/kornia 点击查看 免费下载 导读 位姿优化与刚体运动学中&#xff0c;四元数对数和欧…

📰

【JAVA毕设源码分享】基于spring boot的智慧医疗平台设计与实现(程序+文档+代码讲解+一条龙定制)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬