JDK9特性——模块化REPL工具

news2024/11/14 5:36:36

文章目录

  • 前言
  • 模块化
    • 模块化案例
  • 可交互的REPL工具

在这里插入图片描述

前言

谈到Java9大家往往第一个想到的就是Jigsaw项目(后改名为Modularity)。众所周知,Java已经发展超过20年(95年最初发布),Java和相关生态在不断丰富的同时也越来越暴露出一些问题:

  1. Java运行环境的膨胀和臃肿。每次JVM启动的时候,至少会有30~ 60MB的内存加载,主要原因是JVM需要加载rt.jar,不管其中的类是否被classloader加载,第一步整个jar都会被JVM加载到内存当中去。
  2. 当代码库越来越大,创建复杂,盘根错节的“意大利面条式代码”的几率呈指数级的增长。不同版本的类库交叉依赖导致让人头疼的问题,这些都阻碍了Java 开发和运行效率的提升。
  3. 很难真正地对代码进行封装,而系统并没有对不同部分(也就是JAR文件)之间的依赖关系有个明确的概念。每一个公共类都可以被类路径之下任何其它的公共类所访问到,这样就会导致无意中使用了并不想被公开访问的API。

模块化

(而模块化可以根据模块的需要加载程序运行需要的class)
本质上讲,模块化就是在package外面包裹一层(说白了就是项目下有众多模块),进行管理各个模块,比如一个电商项目下面有支付模块、购物模块,模块跟模块之间相互调用,这样代码就更安全。

模块之间的可访问性是所使用的模块和使用模块之间的双向协议:模块明确地使其公共类型可供其他模块使用,而且使用这些公共类型的模块明确声明对第一个模块的依赖,模块中所有未导出的软件包都是模块的私有的,他们不能在模块之外使用。

模块化案例

创建一个普通的Java项目
在这里插入图片描述

然后在这个项目下准备两个模块。

在这里插入图片描述

然后在JDK19Module1中添加一些类

在这里插入图片描述

然后我们需要考虑如何在JDK19module2中使用这个类?,或者说是使用模块1中的类。

第一步,在两个模块的src下创建各自的module-info.java

在这里插入图片描述

创建完毕的结构为:

在这里插入图片描述

在JDK19Module1的module-info.java文件中。设置哪些包可以向外暴露

image.png

然后在JDK19Module2的module-info.java中引入模块2

在这里插入图片描述

但是发现报错了,原因是,我们要把模块1添加为模块2的运行环境,具体操作如下

project structure > modules > JDK19Module2>dependencies >>+module lib > JDK19Module1> apply >>ok

在这里插入图片描述

这个是时候,在模块2中就可以使用模块1 中的类了

在这里插入图片描述

可交互的REPL工具

像Python和Scala 之类的语言早就有交互式编程环境REPL (read -evaluate - print -loop)了,以交互式的方式对语句和表达式进行求值。开发者只需要输入一些代码,就可以在编译前获得对程序的反馈。而之前的Java 版本要想执行代码,必须创建文件、声明类、提供测试方法方可实现。

要想实现REPL,需要一个命令:JShell命令(linux中是shell命令,java中的shell命令)

在这里插入图片描述

将环境变量配置为java9,就可以在控制命令台使用jshell命令了:如果电脑上安装了其他版本的JDK,环境变量也是其他版本,可以在dos上通过cd 切换到指定版本的bin目录下,就可以使用该版本的jshell了.

在这里插入图片描述

简单的输出语句

在这里插入图片描述

上面操作的代码关闭窗口后就消失了。如果我们需要持久化相关的代码,也可以操作

在这里插入图片描述

退出jshell

/exit

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

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

相关文章

ubuntu(20.04)下截图贴图软件——flameshot(带设快捷键)

ubuntu(20.04)下截图贴图软件——flameshot 一、 安装二、打开Flameshot三、截图快捷键设置 windows习惯了用Snipaste的截图和贴图功能,在ubuntu中也有替代品Flameshot。 一、 安装 首先我们进入官网,并点击download。 在这里可…

轻松鲨-AI文案写作 人工智能聊天

轻松鲨AI助手使用地址:http://www.qingsongsha.com?utm_sourcenavigation_website 或前往苹果App Store下载“轻松鲨APP” 支持AI连续对话聊天,帮你解答各种疑问... 让AI帮你画思维导图写文案,提升工作效率... 内置多场景专业模板&#xff0…

[SQL Server]在应使用条件的上下文(在 ‘)‘ 附近)中指定了非布尔类型的表达式,查询时间大于某个数值时

这种条件查询条件里面不要有空格&#xff0c;一个也不要有 这种条件查询条件里面不要有空格&#xff0c;一个也不要有 $giftsDb::table(drawgot)->where(disabtime,<,"2030-01-03")->select();

安卓判断是否是模拟器,适配主流雷电,MUMU,夜神,逍遥

前言 最近游戏项目组又有新的要求&#xff0c;对于数据上报和数据统计接口&#xff0c;尽可能的具体化&#xff0c;比如是否是模拟器&#xff0c;模拟器的型号&#xff0c;品牌等&#xff0c;都要求统计&#xff0c;后续模拟器玩家在活动发放&#xff0c;安全风控等方面也易于…

Linux Spug自动化运维平台公网远程访问---内网穿透

文章目录 前言1. Docker安装Spug2 . 本地访问测试3. Linux 安装cpolar4. 配置Spug公网访问地址5. 公网远程访问Spug管理界面6. 固定Spug公网地址 前言 Spug 面向中小型企业设计的轻量级无 Agent 的自动化运维平台&#xff0c;整合了主机管理、主机批量执行、主机在线终端、文件…

脚本:用python实现五子棋

文章目录 1. 语言2. 效果3. 脚本4. 解读5. FutureReference 1. 语言 Python 无环境配置、无库安装。 2. 效果 以第一回合为例 玩家X 玩家0 3. 脚本 class GomokuGame:def __init__(self, board_size15):self.board_size board_sizeself.board [[ for _ in range(board_…

InfiniBand vs 光纤通道,存储协议的选择

数字时代&#xff0c;数据量爆发增长&#xff0c;企业越来越迫切地追求高吞吐量、低延迟和更高性能的网络基础设施&#xff0c;存储协议的选择变得愈发至关重要。在众多存储协议中&#xff0c;InfiniBand和光纤通道备受关注。本文旨在深入探讨InfiniBand和光纤通道作为存储协议…

python之有限体积法求解一维热传导问题

1、问题描述 考虑均匀发热无限大平板的稳定导热问题&#xff0c;上图中&#xff0c;A、B两面恒温&#xff0c;控制方程为如下形式&#xff1a; 为扩散系数&#xff0c;为材料传热系数&#xff0c;给定厚度&#xff0c;&#xff0c;和分别为100℃和400℃&#xff0c;发热量q为50…

【C++】红黑树插入操作实现以及验证红黑树是否正确

文章目录 前言一、红黑树的插入操作1.红黑树结点的定义2.红黑树的插入1.uncle存在且为红2.uncle不存在3.uncle存在且为黑 3.完整代码 二、是否为红黑树的验证1.IsBlance函数2.CheckColor函数 三、红黑树与AVL树的比较 前言 红黑树&#xff0c;是一种二叉搜索树&#xff0c;但在…

气传导耳机什么意思?备受好评的气传导耳机推荐

​气传导耳机是近年来备受关注的一种新型耳机&#xff0c;它采用了独特的设计&#xff0c;将声音通过空气传递到耳朵&#xff0c;从而实现听音乐的效果。与传统的入耳式耳机相比&#xff0c;气传导耳机在听音乐的同时还能听到周围环境声音&#xff0c;提高了安全性和舒适性。如…

开学什么牌子的电容笔质量好耐用?精选4款好用的电容笔

随着新学期开始&#xff0c;我们该准备些什么&#xff1f;随着技术的发展&#xff0c;ipad上出现了各种各样的电容笔。一支好的电容笔&#xff0c;不但可以极大地提升我们的学习效率&#xff0c;也可以极大地提升我们的工作效率。国内厂商生产的这支平替电容笔&#xff0c;无论…

「网页开发|后端开发|Flask」08 python接口开发快速入门:技术选型写一个HelloWorld接口

本文主要介绍为网站搭建后端时的技术选型考虑&#xff0c;以及通过写一个简单的HelloWorld接口快速了解前端和后端交互的流程。 文章目录 本系列前文传送门一、场景说明二、后端语言技术选型三、后端框架技术选型Django 特点Flask 特点FastAPI 特点Tarnado 特点 四、用Flask先…

Gin 打包vue或react项目输出文件到程序二进制文件

Gin 打包vue或react项目输出文件到程序二进制文件 背景解决方案1. 示例目录结构2. 有如下问题要解决:3. 方案探索 效果 背景 前后端分离已成为行业主流&#xff0c;vue或react等项目生成的文件独立在一个单独目录&#xff0c;与后端项目无关。 实际部署中&#xff0c;通常前面套…

Scrum敏捷开发端到端管理流程

Leangoo领歌是Scrum中文网&#xff08;scrum.cn&#xff09;旗下的一款永久免费的敏捷研发管理工具。 Leangoo领歌覆盖了敏捷研发全流程&#xff0c;它提供端到端敏捷研发管理解决方案&#xff0c;包括小型团队敏捷开发&#xff0c;规模化敏捷SAFe&#xff0c;Scrum of Scrums…

父子进程区别与GDB多进程调试

父子进程之间的关系&#xff1a; 区别&#xff1a; 1.fork()函数的返回值不同&#xff0c;父进程中&#xff1a;>0 返回的子进程ID 子进程中&#xff1a;ID0 2.pcb中的数据有区别&#xff0c;当前进程的id pid &#xff0c;当前父进程的id ppid&#xff0c;信号集 共同点…

黑马头条 后端项目部署_持续集成 Jenkins配置

项目部署_持续集成 1 今日内容介绍 1.1 什么是持续集成 持续集成&#xff08; Continuous integration &#xff0c; 简称 CI &#xff09;指的是&#xff0c;频繁地&#xff08;一天多次&#xff09;将代码集成到主干 持续集成的组成要素 一个自动构建过程&#xff0c; 从检出…

如何在RK3568开发板上实现USBNET?——飞凌嵌入式/USB Gadget/USB-NET/网络

本文将借助飞凌嵌入式OK3568-C开发板为大家介绍实现USBNET模式的方法&#xff0c;在这之前需要先知道什么是USB Gadget——USB Gadget是指所开发的电子设备以USB从设备的模式通过USB连接到主机。举个例子&#xff1a;将手机通过USB线插入PC后&#xff0c;手机就是USB Gadget。同…

【IP数据报】IP地址和MAC地址的区别

1、用IP地址来标识Internet的主机 在每个IP数据报中&#xff0c;都会携带源IP地址和目标IP地址来标识该IP数据报的源和目的主机。IP数据报在传输过程中&#xff0c;每个中间节点(IP 网关)还需要为其选择从源主机到目的主机的合适的转发路径(即路由)。IP协议可以根据路由选择协…

Android Update Engine 分析(十九)Extent 到底是个什么鬼?

文章目录 0. 导读1. 什么是 Extent?1. 什么是 Extent?2. Wikipedia 中的解释3. Ext4 中的 Extent2. Android OTA 中的 Extent2.1 update_metadata.proto 中的 Extent2.2 update engine 代码中的 Extentpayload_consumer 中的 Extentpayload_generator 中的 Extent2.3 OTA 中的…

Shell 正则表达式及综合案例及文本处理工具

目录 一、常规匹配 二、常用特殊字符 三、匹配手机号 四、案例之归档文件 五、案例之定时归档文件 六、Shell文本处理工具 1. cut工具 2. awk工具 一、常规匹配 一串不包含特殊字符的正则表达式匹配它自己 例子&#xff0c;比如说想要查看密码包含root字符串的&#x…