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代码文件的情况下进行执行了。