目录

方法新增/修改

String

CharSequence

Character

Path

Files

Reader

Writer

InputStream

OutputStream

Predicate

Collection

Optional/OptionalInt/OptionalLong/OptionalDouble

TimeUnit

Pattern

ListSelectionModel

Thread

Policy

ArrayIndexOutOfBoundsException

System

支持 Japanese New Era

Boolean

TimSort

jdk10中带来了var隐式变量声明

Java Launcher

垃圾回收器

模块化开发


方法新增/修改

String

lines()

字符串实例方法,使用专门的 Spliterator 来懒惰地提供源字符串中的行。

jshell> “test\nhoge\n”.lines().map(String::toUpperCase).toArray()
$11 ==> Object[2] { “TEST”, “HOGE” }

repeat(int)

按照参数 int 提供的次数来重复字符串的运行次数。

jshell> "test".repeat(3) $7 ==> "testtesttest"

isBlank()

验证当前字符串是否为空,或者是否只包括空白字符(空白字符由 Character.isWhiteSpace(int) 验证)。

jshell> var halfSpace = "\u0020"
halfSpace ==> " "jshell> halfSpace.isBlank()
$11 ==> truejshell> var fullSpace = "\u3000"
fullSpace ==> " "jshell> fullSpace.isBlank()
$13 ==> true

strip()/stripLeading()/stripTrailing()

这三个方法的作用分别是去掉字符串头和尾的空白符、字符串头的空白符、字符串尾的空白符,基本与 trim()/trimLeft()/trimRight() 方法相同,不过它们的空白字符由 Character.isWhiteSpace(int) 验证。

jshell> var aaa = fullSpace + "aaa" + fullSpace
aaa ==> " aaa "jshell> aaa.strip()
$14 ==> "aaa"jshell> aaa.trim()
$15 ==> " aaa "

CharSequence

compare(CharSequence, CharSequence)

按字典顺序进行排序。
它被 CharSequence/StringBuffer/StringBuilder 中的 compareTo() 使用。因此,这三个类都实现了 Comparable。

Character

toString(int)

JDK 11 使这个过程变得更加方便

jdk10:

jshell> Character.toString(65)
| Error:
| incompatible types: possible lossy conversion from int to char
| Character.toString(65)
|

jdk11:

jshell> Character.toString(65)
$9 ==> "A"

Path

of(String, String…)

此前我们需要使用 Paths.get()。现在,我们像其他类一样使用 of()。

Files

writeString(Path, CharSequence)

我们可以使用该方法来保存一个 String 字符串。

shell> Files.writeString(Path.of("test.txt"), "Hello!!!")
$3 ==> test.txt

readString(Path)

我们可以使用该方法来读取一个 String 字符串。

jshell> Files.readString(Path.of("test.txt"))
$4 ==> "Hello!!!"

Reader

nullReader()

使用该方法,我们可以得到一个不执行任何操作的 Reader。

Writer

nullWriter()

使用该方法,我们可以得到一个不执行任何操作的 Writer。

InputStream

nullInputStream()

使用该方法,我们可以得到一个不执行任何操作的 InputStream。

OutputStream

nullOutputStream()

使用该方法,我们可以得到一个不执行任何操作的 OutputStream。

Predicate

not(Predicate)

此前在需要反转条件的地方,我们选择不使用方法引用。现在相反,我们可以使用方法引用。

Collection

toArray(IntFunction)

此前,我们需要使用像 list.toArray(new String[list.size())]) 这样的无风格标记(non-stylish notation)来从一个集合创建一个类型化数组。现在,我们可以以风格标记(stylish notation)的方式进行编写。

在这里插入代码片

shell> List.of(“aa”,“bb”).toArray(String[]::new) $1 ==> String[2] { “aa”, “bb” }

Optional/OptionalInt/OptionalLong/OptionalDouble

isEmpty()

isPresent() 方法此前已经存在,现在我们使用 isEmpty() 方法。

TimeUnit

convert(Duration)

该方法已经添加到 java.util.concurrent.TimeUnit 中。

Pattern

asMatchPredicate()

到目前为止,只有 asPredicate() 方法,但现在我们还拥有 asMatchPredicate() 方法。

ListSelectionModel

已添加 getSelectedIndices() / getSelectedCount() 方法

Thread

destroy()/stop(Throwable)

移除 destroy() 方法,保留 stop() 方法。

Policy

已移除 javax.security.auth.Policy。

ArrayIndexOutOfBoundsException

抛出的异常信息已修改:

IndexOutOfBoundsException
在本次变更中,已在异常信息中移除 hyphens。

System

arraycopy
setProperty(String, String)

之前改变 java.home 会导致一些问题,现在问题已得到解决。

支持 Japanese New Era

Japanese Imperial Era 计划于 2019.5.1 改用新的规则。本次变更是作为 NewEra 占位符引入的。
在日本政府宣布之后,它将在 JDK 12.0.1 中进行更新。

Boolean

parseBoolean

官方表示,在删除冗余的空检查后,它的速度变得更快。

TimSort

TimSort 是用于 Array.sort() 和 Collection.sort() 的主要算法。
但它有一个错误,主要发生在为某些序列抛出一个 ArrayIndexOutOfBoundsException 异常,不过似乎已修复,尚未确定。

jdk10中带来了var隐式变量声明

如:

var x = new Foo();
for (var x : xs) { ... }
try (var x = ...) { ... } catch ...

jdk11中将允许在声明隐式类型的 lambda 表达式的形式参数时使用 var,如:

(var x, var y) -> x.process(y)

  或者干脆省略掉var符号

(x, y) -> x.process(y)

324: Key Agreement with Curve25519 and Curve448(Curve25519 和 Curve448 算法的密钥协议)
327: Unicode 10
328: Flight Recorder(飞行记录器)

"飞行记录器"旨在“提供一个低开销的数据收集框架,用于对Java应用程序和HotSpot JVM进行故障诊断”。

Java Launcher

329: ChaCha20 and Poly1305
Cryptographic Algorithms(ChaCha20 和 Poly1305 加密算法)
330: Launch Single-File Source-Code Programs(启动单一文件的源代码程序)

主要是改进 Java Launcher 以支持一个命令执行单个 Java 源代码文件。换句话说,在条件满足的情况下,可以简单地直接编译并运行单文件程序,而不再需要调用 javac ,也不需要打包 jar 文件。

比如说,可直接运行:

java HelloWorld.java

而不再需要:

javac -d <memory> HelloWorld.java
java -cp <memory> hello.World

垃圾回收器

331: Low-Overhead Heap Profiling(低开销的 Heap Profiling)
332: Transport Layer Security (TLS) 1.3(支持 TLS 1.3)
333: ZGC: A Scalable Low-Latency Garbage Collector(可伸缩低延迟垃圾收集器)

上一代的垃圾回收器G1已经足够强大,但是,ZGC可能会更加惊艳,ZGC的一个目标是将垃圾回收的暂停时间压缩到10ms之内,这意味着Java可以成为应用到更广泛的领域。官方文档提供了ZGC与G1的benchmarks测试对比,我们看到对比G1的156.806ms平均时间,ZGC的垃圾收集时间低至1.091ms

ZGC与G1GC对比:G1收集器和ZGC收集器 - yudoge - 博客园

模块化开发

为了让Java实现轻量化,Java9正式的推出了模块化系统。Java被拆分为N多个模块,并允许Java程序可以根据需要选择加载程序必须的Java模块,这样就可以让Java轻量化的方式运行。

jdk8目录:

jdk9目录:

上面2个图分别对应JDK8/9的目录下的 src.zip 文件,从图片上看 Java9 的目录发生很大变化了。

一个 java 就拆出了好几个模块,比如 java.logging, java.desktop, java.se 等,之前存放在 tool.jar 里面的合并到了 jdk.* 的模块里面。而替化 rt.jar,tools.jar ,是 JDK9/jmods 文件下 *.jmod 文件。

这样带来的好处在于,开发 javafx 就不用关心 java.se.ee 里面的内容。同时也让代码内部的依赖变得更加清晰

jdk8的依赖图:

jdk9依赖图:

Java9新特性Module模块化编程的方法:java模块化编程方法

java模块化参考文章:Java之模块化_一株禾的博客-CSDN博客_java模块化

JDK8升至JDK11 新特性整理相关推荐

  1. Java11新特性(一)——JDK11新特性概述

    序言 关于JDK11,自从去年也就是2018年9月份 Oracle 对外公布--JDK11正式发布以来,博主就跃跃欲试,但是由于项目周期时间紧,一直未果,今年,也就是2019年2月底系统正式上线,博主 ...

  2. two+few+arguments+php,PHP5.5 ~ PHP7.2 新特性整理

    PHP5.5 ~ PHP7.2 新特性整理 一.从PHP 5.5.x 移植到 PHP 5.6.x 使用表达式定义常量 在之前的 PHP 版本中, 必须使用静态值来定义常量,声明属性以及指定函数参数默认 ...

  3. Swift 3到5.1新特性整理

    本文转载自:https://hicc.me/whats-new-in-swift-3-to-5-1/,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有. Hipo 2.0 重写从 Swif ...

  4. mysql5.0版本特性_mysql各版本的新特性整理

    mysql各版本的新特性整理 一.各版本的常用命令差异 show innodb status\G mysql-5.1 show engines innodb status\G mysql-5.5 关于 ...

  5. JDK11新特性解读

    文章目录 一.JDK11新特性一览 二.JDK11发布计划 三.JDK11特性解读 JEP 181: Nest-Based Access Control(基于嵌套的访问控制) JEP 309: Dyn ...

  6. jdk11新特性,是否有必要从JDK8切换到JDK11

    文章目录 1.完全支持Linux容器(包括docker) 2.ZGC 3.全新的 HTTP 客户端 API 4.模块化(Module) 5.其他 6.是否切换到JDK11 随着2022年jdk11的使 ...

  7. java的发展(8-17新特性整理)

    java java的诞生与历史: 简介:Java是一门面向对象的编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承.指针等概念,因此Java语言具有功能强大和简单易用两个特征. ...

  8. Android Q:新系统名称和新特性整理

    目前关于 Android Q 的相关新闻已经流出,这里我们对 Android Q 的系统名称和新特性进行整理. Android Q 的名字: 很想知道 Android Q 今年使用哪个名字作为系统的名 ...

  9. JDK8中的新特性——函数式接口

    JDK8 简介 概述 Java 8由Oracle从2014年3月18日发布,此版本是自Java 5(发布于2004年)之后的一个重量级版本,也是java发展史上的一个里程碑式的版本.这个版本在JVM. ...

最新文章

  1. 自媒体人怎样快速拥有自己的APP
  2. 谦卑的心 2008-9-27 10:21:00 (21ic)
  3. Kubernetes Dashboard - 每天5分钟玩转 Docker 容器技术(173)
  4. 页面怎么把关键字保留下来_怎么做seo优化,以及网站SEO优化计划!
  5. VirtualBox4.3.12 安装ubuntu 14.04 分辨率过小(600*480)问题的解决方法
  6. 【转】 Objective C实现多继承
  7. R语言回归分析及相关分析
  8. mysql 360 atlas_360 Atlas中间件安装及使用
  9. mysql 查找多组数据结构_MySql主要索引数据结构
  10. 异步FIFO中空满信号如何产生?
  11. 【服务器】【个人网盘】宝塔安装OneIndex
  12. 整合Spring Cloud微服务分布式云架构技术点
  13. 掘金翻译计划月报 — 2017 年 10 月
  14. C++11强类型枚举——枚举类
  15. Maven安装配置与本地仓库
  16. Codejock Xtreme Controls 最新版下载试用2021版本
  17. c#连续打印问题,即进销存销售单打印问题完美解决
  18. Vue简易时间计时器
  19. 基于深度学习的以图搜图
  20. 订阅者Subscriber的编程实现——ROS

热门文章

  1. Dichotomy二分法学习笔记
  2. 2019年中科院信工所夏令营考核内容
  3. 小米无线AR眼镜探索版细节汇总
  4. 基于openGauss的五子棋AI项目
  5. web前端编程实战实例:制作静态京东首页
  6. Pycharm 如何将背景设置成自己喜欢的图片详文
  7. 毕业设计-校园招聘系统
  8. 飞桨EasyDL闪退解决方法
  9. 费曼算法(Feynman algorithm)
  10. 代号记忆之数字和英文总结