Java8到Java11的更改点

从Java 8升级至Java 11

http://openjdk.java.net/projects/jdk9/
http://cr.openjdk.java.net/~iris/se/9/latestSpec/apidiffs/overview-summary.html

以下是相关网站的链接:
http://openjdk.java.net/projects/jdk9/
http://cr.openjdk.java.net/~iris/se/9/latestSpec/apidiffs/overview-summary.html

https://openjdk.java.net/projects/jdk/10/ :在这个网站上,你可以找到有关Java开发工具包(JDK)10的信息。

http://cr.openjdk.java.net/~iris/se/10/latestSpec/apidiffs/overview-summary.html :这个链接提供了Java规范的最新版本,详细说明了JDK 10中的API差异。

https://openjdk.java.net/projects/jdk/11/ 可以在此处找到有关JDK 11项目的信息。

http://cr.openjdk.java.net/~iris/se/11/latestSpec/apidiffs/overview-summary.html 是有关JDK 11最新规范的API差异总览。

话语

首先是关于语言的更改。

请使用中文原生语言翻译以下内容,只需要一个选项:

var

现在可以对本地变量进行类型推断。

var a = "Foo";

关于指针,可能有以下的感觉不错。

new、List.ofなど右辺に型があるものはvarを使う方がいい(Integer、Longなど以外)

java.lang、java.utilなどの基本的なクラスにはvarを使っていい

IntegerやLongなどラッパークラスは扱い注意なのでvarを使わないほうがいい
基本型にはvarを使ってもいい
アプリケーションクラスにはvarを使わないほうがいい

如果使用包装类变量,需要处理null,所以最好明确指定类型。如果不使用null,则可以使用基本类型。
将其应用于项目1,则可以采用以下写法。

var count = Long.valueOf("123");

然而,由于Integer和Long方法混合返回基本类型和包装器类型,因此最好明确指定类型以确保安全。如果使用var接收,则最好指定为基本类型。

私有接口方法 (simplified Chinese)

接口现在可以使用私有方法了。

由于Java 8引入了静态方法和默认方法,因此可以将公共处理逻辑写成私有方法。

有效的try-with-resource最终写法

针对实际上是最终的变量,现在可以使用try-with-resource仅指定变量。
以前,当希望在try-with-resource中自动关闭在try之外定义的可关闭变量时,需要将其赋值给另一个变量。例如,如果希望在finally中使用它,就必须在try之外定义该变量,但是现在可以在这种情况下使用。

var io = new InputStream();
try (var io2 = io) {
  ...
}

请以中文本地化方式改述以下内容,只需要一种选项:

请用中文简述以下内容,只需要提供一种选项:

var io = new InputStream();
try (io) {
  ...
}

在匿名中

现在可以使用钻石操作符在匿名类中进行类型推断。

List<String> strs = new ArrayList<>() {{
  this.add("aa");
  this.add("bb");
}};

不可使用

现在无法使用_作为变量。

应用编程接口 (API)

以下是针对每个类别的标准库更改进行总结。

请点击这里查看关于Java 11的API:

java.lang可以被视为Java编程语言中的核心库。

字符串

压缩字符串

以下是对Java9的原文的中文释义:

这个链接提到了Java9的一个新特性。在Java8之前,Java使用UTF-16将字符存储为char型,每个字符占用2个字节。然而,现在只包含ASCII字符(例如,字母和数字)的字符串将只占用1个字节来存储。

拼接字符串

迄今为止,将字符串进行连接的操作在Java中被展开为StringBuilder类,但通过InvokeDynamic指令,将在运行时确定连接操作。

"aa"+ a

对以下内容进行中文本地化释义,只需一种选项 :

new StringBuilder("aa").append(a);

动态调用

重复(n)

循环可行

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

isBlank()是空的吗?

isBlank是指UTF的空格字符。

去除空格 / 去除前导空格 / 去除尾部空格

使用UTF编码的trim() / trimLeft() / trimRight()的本地化版本

调整()

返回一个按行分割的字符串Stream。

"test\nprogram\n".lines()
  .map(String::strip)
  .collect(Collectors.joining("\n"))

这样做就能去掉每行前后的空格。

java.util 可以被重写为“强大的 java 工具包”。

列/集合/映射

关于[某个主题]

返回一个不可变的集合。

var strs = List.of("apple", "banana");
var sets = Set.of("apple", "banana");
var dict = Map.of(
  "apple", "りんご",
  "banana", "バナナ");

复制品

返回一个不可变的副本

地图

提供的选项:
1. ofEntries():通过多个键值对创建一个新的键值映射(Map)。
2. entry():创建一个置于键值映射中的键值对。

在Map中不仅添加了of方法 ,还添加了ofEntries方法。

import static java.util.Map.entry;

var map = Map.ofEntries(
  entry("key1", "value1"),
  entry("key2", "value2"));

谓语 yǔ)

不是 (bú shì)

方法引用的反转非常方便。

lines.stream()
  .filter(not(String::isEmpty))
  .forEach(System.out::println);

收藏

将整数函数中的元素转换为数组。

在将List等转换为数组时,以前需要预先准备一个大小相符的数组,但现在可以使用strs.toArray(String[]::new)来生成数组。

只要有一个选项,以下是对”dropWhile”和”takeWhile”的中文翻译:

– dropWhile :一直丢弃
– takeWhile :一直获取

在Java 8中,无法实现类似“从数据开始到结束”的Stream处理,但是在Java 9中引入了dropWhile / takeWhile功能,可以实现该功能。

jshell> Stream.of("one", "start", "two", "three", "end", "four").
   ...> dropWhile(s -> !s.equals("start")).
   ...> takeWhile(s -> !s.equals("end")).
   ...> forEach(System.out::println)
start
two
three

由于已经包含了”start”这个词,所以需要跳过它。

jshell> Stream.of("one", "start", "two", "three", "end", "four").
   ...> dropWhile(s -> !s.equals("start")).
   ...> skip(1).
   ...> takeWhile(s -> !s.equals("end")).
   ...> forEach(System.out::println)
two
three

可以为空

重複执行

从Java8开始,有一个具有两个参数的迭代函数,但必须始终使用limit等条件来指定停止条件。

IntStream.iterate(0, i -> i + 3).limit(5)
  .forEach(System.out::println);

由于没有 takeWhile,所以使用起来相当棘手。
然后,通过结合 takeWhile 和 iterate,我学会了如何使用它。
因此,它可以像 for 循环一样使用。

IntStream.iterate(0, i -> i < 10, i -> i + 3)
  .forEach(System.out::println);

如果按照下面这种写法,它将不会回来。请思考一下为什么。

IntStream.iterate(0, i -> i < 10, i -> i++)
  .forEach(System.out::println);

只要这样就可以了。

IntStream.iterate(0, i -> i < 10, i -> ++i)
  .forEach(System.out::println);

可选/可选整型/可选长整型/可选双精度浮点型

抛出异常,否则抛出一个异常。

是空的

流()

转换从Optional到Stream变得更加简单。
这样一来,在返回Optional的Stream中不再需要插入filter(Optional::isPresent)。
例如,当getById返回Optional时。

ids.map(Data::getById)
   .filter(Optional::isPresent)
   .collect(Collectors.toList())

照著以前的方式来做

ids.flatMap(id -> getById(id).stream())
   .collect(Collectors.toList())

可以使用flatMap以类似的方式进行书写。

如果存在,就执行该操作;否则执行另外一个操作。

或者

如果Optional是空的,写下一个像下一个Optional这样的事情变得更容易了。

收藏家

将列表转为不可修改的列表 / 集合转为不可修改的集合 / 将映射转为不可修改的映射

将值存储在不可变集合中的收集器。

筛选

平面映射

罗列

作为迭代器

物体

如果不为空,则需要

要求非空,否则使用其他。

Java.io可以进行文件和网络I/O操作的Java核心库之一。

路径

关于

文件

写字符串 (xiě

将文本写入文件的过程只需一行代码。

读取字符串

从文件中读取文本的处理只需一行。

读者 (dú zhě)

转账至

将Reader阅读的内容直接写入Writer这一行。

空阅读器

作者 (zuò zhě)

空作家

输入流

转移给

将从InputStream中读取的内容直接写入OutputStream的操作可以写在一行中。

空输入流

输出流

空输出流

Java.net.http 可以被改写成以下的中文表达方式:Java 网络,即 Java.net。

HTTP访问已经更新。

sun.misc 回答: 太阳.杂项

好像有很多東西被刪除了

sun.misc.BASE64Encoder / BASE64Decoder 可以被用来进行Base64编码和解码的方法。

由于Java9中已被删除,因此请改用java.util.BASE64.Encoder / Decoder。

JVM,即Java虚拟机。

日志

http://openjdk.java.net/jeps/158:
这个链接提供有关OpenJDK项目中JEP 158的详细信息。

http://openjdk.java.net/jeps/271:
通过此链接可以获取有关OpenJDK项目中JEP 271的详细信息。

G1GC 是默认的垃圾回收器。

打开jdk.java.net/jeps/248

对以下内容进行中文翻译,只需要一种选择:北京中关村科技园区

CMS 不再被支持

提前编译

功能

JShell 终端

发布单文件源代码程序

现在可以使用java命令在不需要使用javac编译单一Java代码文件的情况下进行执行了。

模块系统

Java EE和CORBA被放弃。

广告
将在 10 秒后关闭
bannerAds