作者 l Hollis来源 l Hollis(ID:hollischuang)距离 2019 年结束,只剩下 35 天了。你做好准备迎接 2020 年了吗?一到年底,人就特别容易陷入回忆和比较之中,比如说这几天, 的对比挑战就火了!这个话题登上了微博的热搜榜,也刷爆了朋友圈,人们纷纷晒出自己2017和2019的照片对比。作为一个技术宅,我也做了一个对比:2017 年9 月 21 日,Java 9 正式发布,并且在2017年8月,JCP执行委员会提出将Java的发布频率改为每六个月一次,新的发布周期严格遵循时间点,将在每年的3月份和9月份发布。历任JDK对比1、Java 9Java 9于 2017 年 9 月 22 日正式发布,带来了很多新特性,其中最主要的变化是已经实现的模块化系统。主要特性:模块系统:模块是一个包的容器,Java 9 最大的变化之一是引入了模块系统(Jigsaw 项目)。

HTTP 2 客户端:HTTP/2标准是HTTP协议的最新版本,新的 HTTPClient API 支持 WebSocket 和 HTTP2 流以及服务器推送特性。

改进的 Javadoc:Javadoc 现在支持在 API 文档中的进行搜索。另外,Javadoc 的输出现在符合兼容 HTML5 标准。

集合工厂方法:List,Set 和 Map 接口中,新的静态工厂方法可以创建这些集合的不可变实例。

私有接口方法:在接口中使用private私有方法。我们可以使用 private 访问修饰符在接口中编写私有方法。

改进的 Stream API:改进的 Stream API 添加了一些便利的方法,使流处理更容易,并使用收集器编写复杂的查询。

改进 try-with-resources:如果你已经有一个资源是 final 或等效于 final 变量,您可以在 try-with-resources 语句中使用该变量,而无需在 try-with-resources 语句中声明一个新变量。

改进的弃用注解 @Deprecated:注解 @Deprecated 可以标记 Java API 状态,可以表示被标记的 API 将会被移除,或者已经破坏。

改进 Optional 类:java.util.Optional 添加了很多新的有用方法,Optional 可以直接转为 stream。

响应式流(Reactive Streams) API: Java 9中引入了新的响应式流 API 来支持 Java 9 中的响应式编程。2、Java 10Java 10于 2018 年3 月21 日正式发布,这是作为当今使用最广泛的编程语言之一的Java 语言的第十个大版本。主要特性:局部变量类型推断(Local-Variable Type Inference):使用var关键字进行变量声明,可以进行变量类型的推断。

G1的并行Full GC(Parallel Full GC for G1):G1 垃圾回收器的并行完整垃圾回收,实现并行性来改善最坏情况下的延迟。

应用程序类数据共享(Application Class-Data Sharing):应用程序类数据 (AppCDS) 共享,通过跨进程共享通用类元数据来减少内存占用空间,和减少启动时间。

ThreadLocal握手机制(Thread-Local Handshakes):在不进入到全局 JVM 安全点 (Safepoint) 的情况下,对线程执行回调。优化可以只停止单个线程,而不是停全部线程或一个都不停。3、Java 11Java 11于 2018 年9 月25 日正式发布,可在生产环境中使用!这是自 Java 8 后的首个长期支持版本,将支持到2026年。主要特性:ZGC,可扩展的低延迟垃圾收集器(ZGC: A Scalable Low-Latency Garbage Collector):ZGC是一款号称可以保证每次GC的停顿时间不超过10MS的垃圾回收器,并且和当前的默认垃圾回收起G1相比,吞吐量下降不超过15%。

Epsilon:什么事也不做的垃圾回收器(Epsilon: A No-Op Garbage Collector):这是一款不做垃圾回收的垃圾回收器。这个垃圾回收器看起来并没什么用,主要可以用来进行性能测试、内存压力测试等,Epsilon GC可以作为度量其他垃圾回收器性能的对照组。

增强var用法(Local-Variable Syntax for Lambda Parameters):在Java 11中,var可以用来作为Lambda表达式的局部变量声明。4、Java 12Java 12于 2019 年3 月 19 日正式发布,自Java 11 这一Long Term Support 版本发布之后半年的又一次版本更新主要特性:低暂停时间的 GC(Shenandoah: A Low-Pause-Time Garbage Collector )(Experimental):新增 Shenandoah 算法,通过与正在运行的 Java 线程同时进行 evacuation 工作来减少 GC 暂停时间。

Switch 表达式(Switch Expressions):扩展了 switch 语句,使其不仅可以作为语句(statement),还可以作为表达式(expression)

可中止的 G1 Mixed GC(Abortable Mixed Collections for G1) G1 及时返回未使用的已分配内存(Promptly Return Unused Committed Memory from G1):如果 G1 Mixed GC 存在超出暂停目标的可能性,则使其可中止。5、Java 13Java 13于 2019 年 9 月 17 日正式发布,这一版本中引入了文本块等功能。主要特性:扩展应用程序类-数据共享(Dynamic CDS Archives):以允许在 Java 应用程序执行结束时动态归档类。归档类将包括默认的基础层 CDS(class data-sharing)存档中不存在的所有已加载的应用程序类和库类。

增强 ZGC 以将未使用的堆内存返回给操作系统(ZGC: Uncommit Unused Memory):ZGC 可以将未使用的堆内存返回给操作系统

可在生产环境中使用的 switch 表达式(Switch Expressions):在switch块中引入了yield语句,用于返回值。

将文本块添加到 Java 语言(Text Blocks):引入多行字符串文字,在其中可以放置多行的字符串,不需要进行任何转义。

哪些特性改变你写代码的方式?1、本地变量类型推断在以前的版本中,我们想定义定义局部变量时。我们需要在赋值的左侧提供显式类型,并在赋值的右边提供实现类型,如下面的片段所示:

MyObject value = new MyObject();

List list = new ArrayList();在Java 10中,你可以这样定义对象:

var value = new MyObject();

var list = new ArrayList();正如你所看到的,本地变量类型推断将引入“var”关键字,而不需要显式的规范变量的类型。2、switch表达式在JDK 12中引入了Switch表达式作为预览特性。在Java 13中又修改了这个特性,引入了yield语句,用于返回值。这意味着,switch表达式(返回值)应该使用yield, switch语句(不返回值)应该使用break。在以前,我们想要在switch中返回内容,还是比较麻烦的,一般语法如下:

int i;

switch (x) {

case '1':

i=1;

break;

case '2':

i=2;

break;

default:

i = x.length();

break;

}在JDK13中使用以下语法:

int i = switch (x) {

case '1' -> 1;

case '2' -> 2;

default -> {

int len = args[1].length();

yield len;

}

};或者

int i = switch (x) {

case '1': yield 1;

case '2': yield 2;

default: {

int len = args[1].length();

yield len;

}

};3、文本块支持text block,文本块,是一个多行字符串文字,它避免了对大多数转义序列的需要,以可预测的方式自动格式化字符串,并在需要时让开发人员控制格式。我们以前从外部copy一段文本串到Java中,会被自动转义,如有一段以下字符串:

Hello, world

将其复制到Java的字符串中,会展示成以下内容:

'n' +

'

n' +

'

Hello, world

n' +

'    n' +

'n';即被自动进行了转义,这样的字符串看起来不是很直观,在JDK 13中,就可以使用以下语法了:

'''

Hello, world

''';使用“”“作为文本块的开始符合结束符,在其中就可以放置多行的字符串,不需要进行任何转义。看起来就十分清爽了。后话从2017到2019,不果短短两年时间,Java就发布了5个版本。每个版本都会有很多特性出来,这些特性中虽然没有像Java 8那样提供函数式编程这样的重大改变,但是也提供了switch表达式和block text等大家期待已久的特性。2年过去了,在Java学习的道路上,你进步了吗?欢迎谈谈你这两年的变化。--------  END  ---------

java9新特性 2017_Java 9 ← 2017,2019 → Java 13 ,来看看Java两年来的变化相关推荐

  1. 【小家java】java9新特性(简述十大新特性) 褒贬不一

    相关阅读 [小家java]java5新特性(简述十大新特性) 重要一跃 [小家java]java6新特性(简述十大新特性) 鸡肋升级 [小家java]java7新特性(简述八大新特性) 不温不火 [小 ...

  2. Java9 新特性 详解

    目录 Java9 新特性 详解 1.Java9新特性之---目录结构 2.Java9新特性之---JShell工具 3.Java9新特性之---模块化 4.Java9新特性之---多版本兼容Jar包 ...

  3. JAVA9 新特性 完整使用

    JAVA9 新特性 完整使用 一.介绍(java9新特性) 1.Oracle JDK9 Documentation(java9新特性) 2.官方提供新特性列表(java9新特性) 3.JDK和JRE ...

  4. java中String xx xx_Java 9 紧凑String改进[JEP 254]Java9新特性

    在Java 8中,Java中的String由内部表示char[].每个char存储在内存中的2个字节中.oracle的JDK开发人员分析了大量客户端的应用程序堆转储,他们注意到大多数字符串只能使用拉丁 ...

  5. java9新特性--jShell--命令语法改进:try语和接口的私有方法--String存储结构变更--集合工厂方法--模块化系统--InputStream 加强--增强的 Stream API

    目录 Java 9 的新特性 JDK 和 JRE 目录结构的改变 模块化系统: Jigsaw -> Modularity 实现目标 模块 结构 jShell命令 产生背景 设计理念 实现目标 j ...

  6. java9新特性(简述十大新特性)

    java 9 提供了超过 150 项新功能特性,包括备受期待的模块化系统.可交互的 REPL 工具:jshell,JDK 编译工具,Java 公共 API 和私有代码,以及安全增强.扩展提升.性能管理 ...

  7. JDK16 新特性速览,你还能追上 Java 的更新速度吗?

    点赞关注,不会迷路!    你还能追上 Java 的更新速度吗? 当开发者深陷 Java 8 版本之际,这边下一版本 Java 16 有了最新的消息,与 Java 15 一样,作为短期版本,Oracl ...

  8. JAVA9新特性-模块化

    文章目录 什么是Java Module(模块) 模块的目标 模块语法 模块命名 exports和requires open uses和provides 模块的访问权限 类加载器查找类方式改变 什么是J ...

  9. Java9新特性系列(模块化系统: Jigsaw-Modularity)

    模块化的前时代 Ant时代 相信大家对Ant都不陌生,Ant是任务型的,定义了一系列的任务dir/compile/jar等等,缺点是操作文件 Maven时代 Maven/Gradle相对于Ant,增加 ...

最新文章

  1. 【bzoj3442】学习小组 费用流
  2. 微架构设计:微博计数器的设计
  3. 配置过程中的一些问题
  4. Visual Studio 2008中的jQuery Intellisense
  5. lxcfs容器隔离技术实现原理分析之loadavg、cpuonline
  6. 并发编程 - 线程 - 1.线程queue/2.线程池进程池/3.异步调用与回调机制
  7. 五万字整理Mybatis 入门只需要一篇文章
  8. pr计算机相关知识,影视制作技术第一讲认识premiere(pr)与视频基础知识.ppt
  9. java毕业设计小区停车场管理系统mybatis+源码+调试部署+系统+数据库+lw
  10. php1108脱机使用,惠普p1108能扫描吗 打印机出现脱机解决方法【详解】
  11. 电流检测时运放的偏置电流对精度的影响
  12. wordpress安全_保持WordPress网站安全的48种方法
  13. [已解决]The server cannot or will not process the request due to something that is perceived to be
  14. 联想笔记本睡眠模式发烫问题解决
  15. java面试题总结-详细分类
  16. AD采集中常用的Ksps什么意思
  17. Java 校验注解的使用、自定义校验注解
  18. 使用码上登录实现微信扫码登录
  19. 7个流行的强化学习算法及代码实现
  20. JAVA重庆旅游景点计算机毕业设计Mybatis+系统+数据库+调试部署

热门文章

  1. Question: Database Of Tumor Suppressors And/Or Oncogenes
  2. Project Tango 的一些应用
  3. 软件架构的数据流总结(三)
  4. SQL Server 中 EXEC 与 SP_EXECUTESQL 的区别
  5. android应用崩溃的调试方法
  6. 算法导论22章 基本图算法习题
  7. 从零开始——电子商务平台01
  8. @Html.Action()
  9. Openfire4源码部署到eclipse中并编译
  10. hdu 5071 Chat(模拟|Splay)