提交 cb2e8122 编写于 作者: W wizardforcel

2021-06-25 22:27:24

上级 e3386901
......@@ -438,7 +438,7 @@ RxJava `Observable`应用于小数据集(最长不超过 1000 个元素),
* `zipIterable`:发出一个指定的组合器函数的结果,该函数应用于给定的可观测项发出的多个项的组合
* `zipWith`:发出一个指定的组合器函数的结果,该组合器函数应用于这个和给定的可观测值的组合
下面的代码显示了如何基于字符串串联组合器将`zip`应用于从 1 到 5 到 10 到 16(更多元素)的范围发出的元素。请注意,由于没有要应用的对应项,因此不会应用额外的发射(编号 16):
下面的代码显示了如何基于字符串连接组合器将`zip`应用于从 1 到 5 到 10 到 16(更多元素)的范围发出的元素。请注意,由于没有要应用的对应项,因此不会应用额外的发射(编号 16):
![](img/eb0fc961-36a5-4e0b-a200-3ac7f2b45424.png)
......
......@@ -1283,7 +1283,7 @@ public static String concatRepeat(String str, int n) {
}
```
从 JDK11 开始,解决方案依赖于`String.repeat(int count)`方法。此方法返回一个字符串,该字符串通过将此字符串`count`串联几次而得到。在幕后,这个方法使用了`System.arraycopy()`,这使得这个速度非常快:
从 JDK11 开始,解决方案依赖于`String.repeat(int count)`方法。此方法返回一个字符串,该字符串通过将此字符串`count`连接几次而得到。在幕后,这个方法使用了`System.arraycopy()`,这使得这个速度非常快:
```java
String result = "hello".repeat(5);
......
......@@ -1457,9 +1457,9 @@ List<Melon> melons = Arrays.asList(new Melon("Crenshaw", 2000),
new Melon("Gac", 3000), new Melon("Cantaloupe", 2600));
```
在上一个问题中,我们讨论了内置于`Collectors`中的`Stream`API。在这个类别中,我们还有`Collectors.joining()`。这些收集器的目标是将流中的元素串联成一个按*相遇顺序*`String`。或者,这些收集器可以使用分隔符、前缀和后缀,因此最全面的`joining()`风格是`String joining​(CharSequence delimiter, CharSequence prefix, CharSequence suffix)`
在上一个问题中,我们讨论了内置于`Collectors`中的`Stream`API。在这个类别中,我们还有`Collectors.joining()`。这些收集器的目标是将流中的元素连接成一个按*相遇顺序*`String`。或者,这些收集器可以使用分隔符、前缀和后缀,因此最全面的`joining()`风格是`String joining​(CharSequence delimiter, CharSequence prefix, CharSequence suffix)`
但是,如果我们只想在不使用分隔符的情况下串联西瓜的名称,那么这就是一种方法(只是为了好玩,让我们排序并删除重复的名称):
但是,如果我们只想在不使用分隔符的情况下连接西瓜的名称,那么这就是一种方法(只是为了好玩,让我们排序并删除重复的名称):
```java
String melonNames = melons.stream()
......
......@@ -2209,7 +2209,7 @@ public boolean execute() throws InterruptedException {
# 223 重入读写锁
通常,读写串联(例如,读写文件)应基于两个语句完成:
通常,读写连接(例如,读写文件)应基于两个语句完成:
* 只要没有编写器(共享悲观锁),读者就可以同时阅读。
......
......@@ -139,7 +139,7 @@ HttpRequest request = HttpRequest.newBuilder()
# 查询参数生成器
使用包含查询参数的 URI 意味着对这些参数进行编码。完成此任务的 Java 内置方法是`URLEncoder.encode()`。但将多个查询参数串联起来并对其进行编码会导致类似以下情况:
使用包含查询参数的 URI 意味着对这些参数进行编码。完成此任务的 Java 内置方法是`URLEncoder.encode()`。但将多个查询参数连接起来并对其进行编码会导致类似以下情况:
```java
URI uri = URI.create("http://localhost:8080/books?name=" +
......
......@@ -1178,7 +1178,7 @@ private static final Logger log =
log.debug("Adding new guess {} to the game", newGuess);
```
它创建一个调试消息。Slf4j 支持在字符串中使用`{}`文本进行格式化。这样,就不需要从小部分追加字符串,而且如果实际的日志项没有发送到日志目标,则不会执行格式化。如果我们以任何形式使用`String`串联来传递一个字符串作为参数,那么格式化就会发生,即使根据示例不需要调试日志记录。
它创建一个调试消息。Slf4j 支持在字符串中使用`{}`文本进行格式化。这样,就不需要从小部分追加字符串,而且如果实际的日志项没有发送到日志目标,则不会执行格式化。如果我们以任何形式使用`String`连接来传递一个字符串作为参数,那么格式化就会发生,即使根据示例不需要调试日志记录。
日志记录方法的版本也只有两个参数,`String`消息和`Throwable`。在这种情况下,日志框架将负责异常的输出和栈跟踪。如果您在异常处理代码中记录了一些内容,请记录异常并让记录器格式化它。
......
......@@ -233,7 +233,7 @@ System.out.println(sf); //prints: 23.42
Java11 在`String`类中引入了几个新方法。
`repeat()`方法允许您基于同一字符串的多个串联创建新的字符串值,如下代码所示:
`repeat()`方法允许您基于同一字符串的多个连接创建新的字符串值,如下代码所示:
```java
System.out.println("ab".repeat(3)); //prints: ababab
......
......@@ -420,7 +420,7 @@ System.out.println(list); //prints: [null, S2, s1, s3]
以下`Map`方法对于本书的范围来说太复杂了,所以我们只是为了完整起见才提到它们。它们允许组合或计算多个值,并将它们聚集在`Map`中的单个现有值中,或创建一个新值:
* `default V merge(K key, V value, BiFunction<V,V,V> remappingFunction)`:如果提供的键值对存在且值不是`null`,则提供的函数用于计算新值;如果新计算的值是`null`,则删除键值对;如果提供的键值对不存在或值是`null`,则提供的非空值替换当前值;此方法可用于聚合多个值;例如,可用于串联字符串值:`map.merge(key, value, String::concat)`;我们将在第 13 章、“函数式编程”中解释`String::concat`的含义
* `default V merge(K key, V value, BiFunction<V,V,V> remappingFunction)`:如果提供的键值对存在且值不是`null`,则提供的函数用于计算新值;如果新计算的值是`null`,则删除键值对;如果提供的键值对不存在或值是`null`,则提供的非空值替换当前值;此方法可用于聚合多个值;例如,可用于连接字符串值:`map.merge(key, value, String::concat)`;我们将在第 13 章、“函数式编程”中解释`String::concat`的含义
* `default V compute(K key, BiFunction<K,V,V> remappingFunction)`:使用提供的函数计算新值
* `default V computeIfAbsent(K key, Function<K,V> mappingFunction)`:仅当提供的键尚未与值关联或值为`null`时,才使用提供的函数计算新值
* `default V computeIfPresent(K key, BiFunction<K,V,V> remappingFunction)`:仅当提供的键已经与值关联并且该值不是`null`时,才使用提供的函数计算新值
......
......@@ -102,7 +102,7 @@ Stream.of("1 ", 2).forEach(System.out::print); //prints: 1 2
泛型可以帮助程序员避免许多错误,因此应该尽可能地添加泛型。
`of(T... values)`方法也可用于多个流的串联。例如,假设我们有以下四个流,我们希望将它们连接成一个流:
`of(T... values)`方法也可用于多个流的连接。例如,假设我们有以下四个流,我们希望将它们连接成一个流:
```java
Stream<Integer> stream1 = Stream.of(1, 2);
......
......@@ -122,12 +122,12 @@ HTTP2.0 是 HTTP1.1 协议的继承者,这个新版本的协议解决了前一
Java10 于 2018 年 3 月发布,除了之前介绍的基于时间的版本控制之外,还有以下 11 个特性:
* 局部变量类型推断
* 将 JDK 林整合到单个存储库中
* 将 JDK 林整合到单个存储库中
* 垃圾收集接口
* G1 的并行完全垃圾收集器
* 应用类数据共享
* 线程本地握手
* 删除本机头生成工具(javah
* 删除本机头生成工具(`javah`
* 其他 Unicode 语言标记扩展
* 备用内存设备上的堆分配
* 基于 Java 的 JIT 编译器实验
......@@ -227,7 +227,7 @@ Java11 于 2018 年 9 月发布,具有以下四个特性:
3. JDK9 对 Java 平台最重要的改变是什么?
4. Java11 删除了什么:CORBA、Lambda 还是 G1?
5. CD 支持更快的启动还是更高效的垃圾收集?
6. 什么是ε
6. 什么是 Epsilon
7. `var`是数据类型、标识符、保留字还是关键字?
8. 哪个 Java 版本向 Java 平台引入了根证书?
9. 哪个版本包括对垃圾收集的增强?
......
......@@ -11,7 +11,7 @@ JEP 计划是 Oracle 支持开源、开放创新和开放标准的一部分。
在本章中,我们将介绍以下内容:
* 改进的争用锁
* 分段码缓存
* 分段码缓存
* 智能 Java 编译,第二阶段【JEP199】
* 解决 Lint 和 Doclint 警告【JEP212】
* Javac 的分层属性【JEP215】
......@@ -21,22 +21,22 @@ JEP 计划是 Oracle 支持开源、开放创新和开放标准的一部分。
* 测试 Javac【JEP235】生成的类文件属性
* 在 CD 档案中存储内部字符串【JEP250】
* 为模块化准备 JavaFXUI 控件和 CSS API【JEP253】
*
*凑字符串
* 将选定的 Xerces 2.11.0 更新合并到 JAXP【JEP255】
* 将 JavaFX/Media 更新为 GStreamer 的更新版本【JEP257】
* HarfBuzz 字体布局引擎
* Windows 和 Linux 上的 HiDPI 图形【JEP263】
* Marlin图形渲染器
* Unicode 8.0.0[JEP267 和 JEP314]
* 临界截面预留堆放区【JEP270】
* 临界段的预留栈区【JEP270】
* 语言定义对象模型的动态链接
* G1 中大型物体的附加试验【JEP278】
* 改进测试故障排除
* 优化字符串串联
* 热点 C++ 单元测试框架【JEP281】
* G1 中大型对象的附加试验【JEP278】
* 改进测试失败的故障排除
* 优化字符串连接
* Hotspot C++ 单元测试框架【JEP281】
* 在 Linux 上启用 GTK3【JEP283】
*热点构建系统
* 将 JDF 林整合到单个存储库中【JEP296】
* Hotspot 构建系统
* 将 JDF 林整合到单个存储库中【JEP296】
# 技术要求
......@@ -185,8 +185,8 @@ public double computeSometing(double x, double y) {
那么,Java9、10 和 11 中发生了什么变化?要回答这个问题,我们需要回顾一下 Java8 引入的几个影响 Java 注释的更改:
* Lambda 表达式
* 重复注
* Java 类型注
* 重复注
* Java 类型注
这些与 Java8 相关的更改影响了 Java 注释,但并没有改变`javac`处理它们的方式。有一些硬编码的解决方案允许`javac`处理新的注释,但它们效率不高。此外,这种类型的编码(硬编码解决方法)很难维护。
......@@ -205,7 +205,7 @@ public double computeSometing(double x, double y) {
**语义版本控制**使用主要、次要、补丁(`0.0.0`)模式,如下所示:
* **主要**等同于不向后兼容的新 API 更改
* **次要**是添加向后兼容的功能
* **次要**是添加向后兼容的功能的情况
* **补丁**是指错误修复或向后兼容的小改动
Oracle 从 Java9 开始就支持语义版本控制。对于 Java,Java 版本号的前三个元素将使用主次安全模式:
......@@ -217,8 +217,8 @@ Oracle 从 Java9 开始就支持语义版本控制。对于 Java,Java 版本
Java9 有三个版本:初始版本和两个更新。下面列出的版本演示了主要的次要安全模式:
* Java SE 9
* Java SE 9.0.1
* Java SE 9.0.4
* Java SE 9.0.1
* Java SE 9.0.4
如第 1 章、“Java11 场景”所述,在 Java9 之后的版本将遵循*的时间发布模式年月日*。使用该模式,Java9 之后的四个版本如下:
......@@ -317,7 +317,7 @@ Java9 引入了更高效的 cd,Java9 进一步改进了这个特性,特别
我们对 CDS 存档使用三个步骤:确定要包含的类、创建存档和使用存档:
1. 阶级决
1. 类的确
2. AppCD 存档创建
3. 使用 AppCD 存档
......@@ -476,7 +476,7 @@ Xerces 2.11.0 支持以下标准:
* **文档对象模型****DOM**):
* 3 级:
* 核心
* 加载保存
* 加载保存
* 2 级:
* 核心
* 事件
......@@ -486,7 +486,7 @@ Xerces 2.11.0 支持以下标准:
* XML 2.0.2 的简单 API
* Java API for XML Processing(JAXP)1.4
* XML 1.0 流 API
* XML 架构 1.0
* XML 模式 1.0
* XML 模式 1.1
* XML 模式定义语言
......@@ -496,7 +496,7 @@ JDK 已更新为包括以下 Xerces 2.11.0 类别:
* 数据类型
* 文档对象模型级别 3
* XML 架构验证
* XPointer 公司
* XPointer
JAXP 的公共 API 在 Java9、10 或 11 中没有改变。
......@@ -657,8 +657,8 @@ Java 中添加了额外的功能来自动收集信息,以支持测试失败和
测试中有两种基本类型的信息:
* 环境
*
* 环境
*
每种类型的信息将在下一节中描述。
......@@ -671,8 +671,8 @@ Java 中添加了额外的功能来自动收集信息,以支持测试失败和
* I/O 负载
* 内存空间
* 打开的文件
* 开放式插座
* 进程正在运行
* 打开的套接字
* 正在运行的进程
* 系统事件
* 系统消息
......@@ -681,7 +681,7 @@ Java 中添加了额外的功能来自动收集信息,以支持测试失败和
在测试过程中也有与 Java 进程直接相关的信息。其中包括:
* C 堆
*转储
* 堆转储
* 小型转储
* 堆统计信息
* Java 栈
......@@ -692,7 +692,7 @@ Java 中添加了额外的功能来自动收集信息,以支持测试失败和
在 Java9 之前,字符串连接由`javac`翻译成`StringBuilder : : append`链。这是一种次优的翻译方法,通常需要预先确定。
增强更改了由`javac`生成的字符串串联字节码序列,因此它使用`INVOKEDYNAMIC`调用。增强的目的是增加优化并支持将来的优化,而不需要重新格式化`javac`的字节码。
增强更改了由`javac`生成的字符串连接字节码序列,因此它使用`INVOKEDYNAMIC`调用。增强的目的是增加优化并支持将来的优化,而不需要重新格式化`javac`的字节码。
有关`INVOKEDYNAMIC`的更多信息,请参见 JEP276。
......@@ -711,7 +711,7 @@ HotSpot 是 JVM 的名称。此 Java 增强旨在支持 JVM 的 C++ 单元测试
* 个性化测试结果
* 与现有基础设施集成
* 内部测试支持
* 阳性和阴性检测
* 正例和负例检测
* 短执行时间测试
* 支持所有 JDK9 构建平台
* 测试编译目标
......@@ -741,15 +741,15 @@ GTK+,正式称为 GIMP 工具箱,是一种用于创建图形用户界面的
那么,实现这一增强需要进行哪些更改?对于 JavaFX,更改了三个具体内容:
* GTK 2 和 GTK 3 都增加了自动测试
* 添加了动态加载 gtk2 的功能
* 添加了动态加载 GTK2 的功能
* 为 GTK 3 添加了支持
对于 AWT 和 Swing,实现了以下更改:
* GTK 2 和 GTK 3 都增加了自动测试
* `AwtRobot`迁移到 gtk3
* `AwtRobot`迁移到 GTK3
* 为 GTK 3 更新了`FileChooserDilaog`
* 添加了动态加载 gtk3 的功能
* 添加了动态加载 GTK3 的功能
* Swing GTK LnF 经过修改以支持 GTK 3
Swing GTK LnF 是 Swing GTK look and feel 的缩写。
......@@ -784,7 +784,7 @@ Java9 平台由八个不同的存储库组成,如下图所示。在 Java10 中
# 问题
1. 什么是知足锁?
1. 什么是乐观锁?
2. 什么是代码缓存?
3. 用于定义已分析编译方法的代码堆大小的命令行代码是什么?
4. 警告上下文中的 Lint 和 Doclint 是什么?
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册