专业的JAVA编程教程与资源

网站首页 > java教程 正文

Java9新特性Jigsaw和Jshell(java9 模块化 系统)

temp10 2024-09-11 09:15:47 java教程 10 ℃ 0 评论

java9

java的版本迭代还是比较快的,很多的框架例如Spring源码用到JAVA8的新的特性,Oracle也提供了长期的维护版本的JDK11,企业将来转向新的版本,也将慢慢地变成一种趋势。所以还是有必要学习新的JAVA版本的特性。在阅读源码,包括后期的使用也是有帮助的。

java 9 在2017年9月21日发布,提供了超过 150 项新功能特性。包括:模块化系统、

Java9新特性Jigsaw和Jshell(java9 模块化 系统)

可交互的 REPL 工具:jshell,JDK 编译工具,Java 公共 API 和私有代码,以及安全增强、扩展提升、性能管理改善等。

具体的新特性可以查看官方网址:

https://docs.oracle.com/javase/9/whatsnew/toc.htm#JSNEW-GUID-71A09701-7412-4499-A88D-53FA8BFBD3D0

java9下载:https://pan.baidu.com/s/19Q0Iy3atdRa1pjlOMqgHmw 提取码:i6rj

背景

每种新技术的诞生,都要吐槽下前面的技术遇到的各种问题。Java 已经发展超过 20 年,Java 和相关生态在不断丰富的同时也越来越暴露出一些问题:

1.每次JVM启动的时候,至少会有30~60MB的内存加载,主要原因是JVM需要加载rt.jar,不管

其中的类是否被classloader加载,第一步整个jar都会被JVM加载到内存当中去。

Java9将采用模块化,根据模块的需要,加载程序运行需要的class。下节将具体叙述。

2.当代码库越来越大,不同版本的类库交叉依赖导致操作很复杂,这些都阻碍了 Java 开发和运行效率的提升。

3.每一个公共类都可以被类路径之下任何其它的公共类所访问到,这样就会导致无意中使用了并不想被公开访问的 API。

4.类路径本身也存在问题: 你怎么知晓所有需要的 JAR 都已经有了, 或者是不是会有重复的项呢?

模块化系统

模块化系统:Jigsaw,又称为Modularity。 模块将由通常的类和新的模块声明文件(module-info.java)组成。

该文件是位于 java 代码结构的顶层,该模块描述符明确地定义了我们的模块需要什么依赖关系,以及哪些模块被外部使用。

新建了一个工程java9Demo,工程下包含两个模块,test01,test02。

test01和test02的工程下有个module-info.java文件。当我们在test01的mian方法调用test02中的java9类时,会报错。

这时,只需添加如下代码:

至此,test01即可调用别的模块的类。requires:需要哪个模块,引入。exports:暴露出去,给别人调用。

模块化(以 Java 平台模块系统的形式)将 JDK 分成一组模块,可以在编译时,运行时或者构建时进行组合。在于减少内存的开销。

只须必要模块,而非全部jdk模块,可简化各种类库和大型应用的开发和维护。同时增加了安全性,可以自主选择是否给别的模块调用。

Jshell

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

Jshell使用也很简单。

配置好Java9的环境

查看帮助:/help intro 简单的介绍

所有的命令的介绍

使用

创建一个方法并调用

调用其他方法时,导入指定的包

默认已经导入如下的所有包:(包含 java.lang)

Tab键的命令自动补全

列出当前 session 里所有有效的代码片段

还有/var,显示session里所申明的变量,/methods,显示sessin里所申明的方法。

/edit add(add之前申明方法),可以在外部打开并编辑这个方法,/exit,退出jshell。

还有很多的命令不一一举例了。

在这里列举了两个主要的特性,后面继续更新。

可以关注我,持续分享Java,微服务,高并发,大数据知识。

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表