Java入坑之模块化

一、Java模块化概述 

1.1历史开发模式

JDK 8及以前开发模式

  • Java源代码以Java文件(类/接口/注解等)的形式编写
  • 每个Java文件被明确地放入到一个包中
  • Java文件编译后的class文件,可以压缩为jar包,供别的程序调用
  • 一个程序可以使用类库,类库通常以jar包呈现
  • 将所有程序jar包,类库jar包,都放在classpath上,来运行程序
  • -以Jar为中心

问题

  • jar文件无法控制别人访问其内部的public的类
  • 无法控制不同jar包中,相同的类名(包名+类名)
  • Java运行时,无法判定classpath路径上的jar中有多少个不同版本的文件。Java加载第一个符合名字的类
  • Java运行时,无法预判classpath路径上是否缺失了一些关键类

1.2模块化

Java模块化是Java 9引入的一种新的编程范式,它可以让我们将代码组织成更高层次的单元,提高代码的可重用性、可维护性和安全性。Java模块化的核心概念是模块(module),它是一组相关的包和资源,以及一个描述模块属性的文件(module-info.java)。模块可以声明它们所依赖的其他模块,以及它们所导出的包,从而实现对内部实现的封装和对外部接口的公开。模块还可以提供和使用服务,实现松耦合的设计。Java模块化系统还提供了一些工具和命令,让我们可以方便地创建、管理和运行模块化应用程序。 

模块化原则

  • -强封装性:一个模块必须能够对其他模块隐藏其部分代码。
  • -定义良好的接口:模块必须向其他模块公开定义良好且稳定的接口。
  • -显式依赖:明确一个模块需要哪些模块的支持才能完成工作。

 二、模块创建和运行 

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【docker系列】docker高阶篇

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

正则化与正则剪枝

写在前面:本博客仅作记录学习之用,部分图片来自网络,如需引用请注明出处,同时如有侵犯您的权益,请联系删除! 文章目录 引言正则化为什么会过拟合拉格朗日与正则化梯度衰减与正则化 应用解决过拟合网络剪枝 …

Linux socket编程(6):IO复用之select原理及例子

文章目录 1 五种I/O模型1.1 阻塞I/O模型1.2 非阻塞I/O模型1.3 I/O复用模型1.4 信号驱动I/O模型1.5 异步I/O模型 2 select函数3 select实战:实现多个套接字监听3.1 客户端3.2 服务端3.3 实验结果3.4 完整代码 在之前的网络编程中,我们遇到了一个问题&…

Linux的基本指令 ( 一 )

目录 前言 Linux基本指令 快速认识五个指令 ls指令 补充内容 pwd指令 补充内容 cd指令 补充内容 重新认识指令 指令的本质 which指令 alias指令 最后 一个文件的三种时间 tree指令及安装 tree指令 前言 关于Linux操作系统的桌面,在学校教学中我们…

CountDownLatch实战应用——批量数据多线程协调异步处理(主线程执行事务回滚)

😊 作者: 一恍过去 💖 主页: https://blog.csdn.net/zhuocailing3390 🎊 社区: Java技术栈交流 🎉 主题: CountDownLatch实战应用——批量数据多线程协调异步处理(主线程执行事务…

【C/C++】如何不使用 sizeof 求数据类型占用的字节数

实现代码&#xff1a; #include <stdio.h>#define GET_TYPE_SIZE(TYPE) ((char *)(&TYPE 1) - (char *) & TYPE)int main(void) {char a a;short b 0;int c 0;long d 0;long long e 0;float f 0.0;double g 0.0;long double h 0.0;char* i NULL;print…

大语言模型损失函数详解

我们可以把语言模型分为两类&#xff1a; 自动回归式语言模型&#xff1a;自动回归式语言模型在本质上是单向的&#xff0c;也就是说&#xff0c;它只沿着一个方向阅读句子。正向&#xff08;从左到右&#xff09;预测&#xff1b;反向&#xff08;从右到左&#xff09;预测。…

第二十二章 解读pycocotools的API,目标检测mAP的计算COCO的评价指标(工具)

Pycocotools介绍 为使用户更好地使用 COCO数据集, COCO 提供了各种 API。COCO是一个大型的图像数据集&#xff0c;用于目标检测、分割、人的关键点检测、素材分割和标题生成。这个包提供了Matlab、Python和luaapi&#xff0c;这些api有助于在COCO中加载、解析和可视化注释。 …

【古诗生成AI实战】之二——项目架构设计

[1] 项目架构 在我们深入古诗生成AI项目的具体实践之前&#xff0c;让我们首先理解整个项目的架构。本项目的代码流程主要分为三个关键阶段&#xff1a; 1、数据处理阶段&#xff1b;   2、模型训练阶段&#xff1b;   3、文本生成阶段。 第一步&#xff1a;在数据处理阶段…

6.12找树左下角的值(LC513-M)

算法&#xff1a; 这道题适合用迭代法&#xff0c;层序遍历&#xff1a;按层遍历&#xff0c;每次把每层最左边的值保存、更新到result里面。 看看Java怎么实现层序遍历的&#xff08;用队列&#xff09;&#xff1a; /*** Definition for a binary tree node.* public clas…

mysql从库设置为只读

直奔主题&#xff0c;mysql设置为只读后&#xff0c;无法增删改。 设置命令&#xff1a; mysql> set global read_only1; #1是只读&#xff0c;0是读写 mysql> show global variables like %read_only%; 以下是相关说明&#xff1a; 1、对于数据库读写状态&#xf…

Nginx(八) aio sendfile directio 组合使用测试(1)

测试输出日志太多&#xff0c;文章篇幅太长&#xff0c;所以没法一次性发布&#xff0c;只能拆成两部分了。 Nginx(九) aio & sendfile & directio 组合使用测试(2) 还是依照惯例&#xff0c;先上结论&#xff1a; 1、当开启aio&#xff0c;关闭sendfile时&#xff0…