java9新特性

简介: 1、模块化系统:Jigsaw->Modularity解决越来越臃肿 的java运行环境。       主要目的在于减少内存的开销,只须必要模块,而非全部jdk模块,可简化各种类库和大型应用的开发和维护, 改进 Java SE 平台,使其可以适应不同...

1、模块化系统:Jigsaw->Modularity

解决越来越臃肿 的java运行环境。

       主要目的在于减少内存的开销,只须必要模块,而非全部jdk模块,可简化各种类库和大型应用的开发和维护, 改进 Java SE 平台,使其可以适应不同大小的计算设备,改进其安全性,可维护性,提高性能

代码示例

1、从代码结构上来看,在包名同级下多了一个module-info.java文件

img_ceca4063044d584b6ad7195c9ba6810e.png
图1-1

这个文件就是所谓的模块化文件

img_c3b131f0526ab12e95b0225c052ec812.png
图1-2

在module 文件中直接 exports关键字+包名路径就可以选择需要对外暴露的class

当外部文件需要使用这个的时候

img_30900878e934faab43a779a727508b74.png
图1-3

这样通过requires关键字+项目名就可以导入该项目名下暴露的类

个人看法:

    模块化系统是基于jar包和类之间存在的,目的在于尽可能的减少jar中多余类的加载,保证整体项目运行时的效率,对于项目运行肯定有一定的积极意义,但是对于开发者来看,再一次增加代码的配置工作量,让本来就冗长的java 代码变得更加复杂,不见得会得到开发者的认可,当然如果对应的编译器能够得到进一步的改进,可能会稍微好一点,

2、jShell命令

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

使用方法:jdk的bin目录下,有一个jshell文件,打开进入

img_8879a416090a8903cb91f1b4e5c73b6f.png
图2-1

可以利用这个窗口进行java的代码段的运行

img_1fec4e4a753d8bf409980d3bf477c9a4.png
图2-2

这种方式通过import导包的,当时这个也有默认的导入的包,通过/imports命令就可以查看

img_73cd9fa75e2b0723ae23963981aaf08f.png
图2-3

个人看法:这个对于初学者来说简直的福音啊!

3、接口的私有方法

jdk9,允许在接口中使用私有方法

img_f9ed3daa9cdb9ae4543f3fc06a983814.png
图3-1

java官方在近期版本对于接口的改动有点夸张:不断的开放接口的使用权限,说不准以后的接口跟抽象类有可能会合并在一起

4、钻石操作符的使用升级

钻石操作符,是官方给出的说法,其实就是之前版本的泛型操作符

img_92100b64aa28608992e0fed9c9b1ad1a.png
图4-1

图中的代码在java8中是编译不通过的,但是java9可以,这个主要涉及到匿名子类的时候

5、语法改进:try语句

对于写底层的人来说,try语法的改进绝对是福音。

首先摆上java7之前的时候的代码

img_ab2d549f6a74329045dc41f687cc1318.png
图5-1

一堆的重复代码,再来看看java8里面的代码

img_05048c2485d73ab85899c8219235768d.png
图5-2

需要把实例化的过程放到入口参数中,看起来简单了很多,接下来再看看java9的实现方式。

img_ca86f10856fb6a8b2d34f883a7c70be8.png
图5-3

代码看起来更加的舒服了

个人看法:减少了很多的冗余代码,编码风格也更加健壮

6、String存储结构变更

这个变化直接看源码就好了

img_f703e93f397b39213fbd3b324ab99536.png
图6-1

String的实现底层由char[] 改为byte[],存储效率变高,调用效率同样变高

img_041c228c773fc51ddc31918a35544caa.png
图6-2

7、便利的集合特性of()

快速创建只读集合,java8 之前

img_0bb82c8c2f87361329ae6ac2750908a1.png
图7-1

java9 的实现方式

img_e8059ed432076954b1c482403bb4a46e.png
图7-2

个人看法:看起来简单的不少

8、增强的Stream API

        1、takeWhile

img_82f9848517a1f322c8bb91170ee494c3.png
图8-1

        2、dropWhile

            dropWhile():与 takeWhile() 整好相反,dropWhile取出的是后面的数据

        3、ofNullable

            ofNullable(T t): t可以为null

        4、iterator

            iterator()重载的方法

个人看法:无

9、全新的HTTP客户端API

img_b81e40c7bfec7c632fbbd8a6139df47b.png
图9-1

个人看法:好久没有用过jdk自带的httpclient了,要么用的是公司自己的封装的,要么是外来的工具包,可以考虑更新一下公司的httpclient工具类了

11、Deprecated的相关API

废弃了好多的api,不一一解释了


备注:

还有很多新的特性,多版本兼容jar包,智能java编译工具,统一的jvm日志系统等,就不一一说明了

附上github地址

https://github.com/kevin0016/java9

相关文章
|
9天前
|
存储 安全 Java
Java Map新玩法:探索HashMap和TreeMap的高级特性,让你的代码更强大!
【10月更文挑战第17天】Java Map新玩法:探索HashMap和TreeMap的高级特性,让你的代码更强大!
26 2
|
10天前
|
存储 Java
深入探讨了Java集合框架中的HashSet和TreeSet,解析了两者在元素存储上的无序与有序特性。
【10月更文挑战第16天】本文深入探讨了Java集合框架中的HashSet和TreeSet,解析了两者在元素存储上的无序与有序特性。HashSet基于哈希表实现,添加元素时根据哈希值分布,遍历时顺序不可预测;而TreeSet利用红黑树结构,按自然顺序或自定义顺序存储元素,确保遍历时有序输出。文章还提供了示例代码,帮助读者更好地理解这两种集合类型的使用场景和内部机制。
27 3
|
10天前
|
存储 Java 数据处理
Java Set接口凭借其独特的“不重复”特性,在集合框架中占据重要地位
【10月更文挑战第16天】Java Set接口凭借其独特的“不重复”特性,在集合框架中占据重要地位。本文通过快速去重和高效查找两个案例,展示了Set如何简化数据处理流程,提升代码效率。使用HashSet可轻松实现数据去重,而contains方法则提供了快速查找的功能,彰显了Set在处理大量数据时的优势。
21 2
|
12天前
|
存储 算法 Java
Java Set因其“无重复”特性在集合框架中独树一帜
【10月更文挑战第14天】Java Set因其“无重复”特性在集合框架中独树一帜。本文深入解析Set接口及其主要实现类(如HashSet、TreeSet)如何通过特定的数据结构(哈希表、红黑树)确保元素唯一性,并提供最佳实践建议,包括选择合适的Set实现类和正确实现自定义对象的`hashCode()`与`equals()`方法。
23 3
|
16天前
|
安全 Java API
Java 17新特性让你的代码起飞!
【10月更文挑战第4天】自Java 8发布以来,Java语言经历了多次重大更新,每一次都引入了令人兴奋的新特性,极大地提升了开发效率和代码质量。本文将带你从Java 8一路走到Java 17,探索那些能让你的代码起飞的关键特性。
57 1
|
24天前
|
编解码 Oracle Java
java9到java17的新特性学习--github新项目
本文宣布了一个名为"JavaLearnNote"的新GitHub项目,该项目旨在帮助Java开发者深入理解和掌握从Java 9到Java 17的每个版本的关键新特性,并通过实战演示、社区支持和持续更新来促进学习。
63 3
|
4天前
|
Java API 开发者
Java 8新特性之Stream API详解
【10月更文挑战第22天】Java 8引入了重要的Stream API,用于处理集合数据。本文分三部分介绍:基本概念与原理、使用方法及应用实例。Stream API支持延迟执行、惰性求值,提供过滤、映射、排序、聚合等操作,使代码更简洁、易读。文中详细讲解了创建Stream、中间操作、终端操作以及具体应用场景,如排序、过滤、映射和聚合。
10 3
|
7天前
|
存储 Java API
优雅地使用Java Map,通过掌握其高级特性和技巧,让代码更简洁。
【10月更文挑战第19天】本文介绍了如何优雅地使用Java Map,通过掌握其高级特性和技巧,让代码更简洁。内容包括Map的初始化、使用Stream API处理Map、利用merge方法、使用ComputeIfAbsent和ComputeIfPresent,以及Map的默认方法。这些技巧不仅提高了代码的可读性和维护性,还提升了开发效率。
22 3
|
7天前
|
存储 安全 Java
Java Map新玩法:深入探讨HashMap和TreeMap的高级特性
【10月更文挑战第19天】Java Map新玩法:深入探讨HashMap和TreeMap的高级特性,包括初始容量与加载因子的优化、高效的遍历方法、线程安全性处理以及TreeMap的自然排序、自定义排序、范围查询等功能,助你提升代码性能与灵活性。
15 2
|
13天前
|
Java 开发者
在Java的集合世界里,Set以其独特的特性脱颖而出,它通过“哈希魔法”和“红黑树防御”两大绝技
【10月更文挑战第13天】在Java的集合世界里,Set以其独特的特性脱颖而出。它通过“哈希魔法”和“红黑树防御”两大绝技,有效抵御重复元素的侵扰,确保集合的纯洁性和有序性。无论是“人海战术”还是“偷梁换柱”,Set都能从容应对,成为开发者手中不可或缺的利器。
29 6