From 93884b9a2b8a2117305cf5a3cc8e671a5f1f657a Mon Sep 17 00:00:00 2001
From: LaJiOJ <1184264181@qq.com>
Date: Tue, 20 Oct 2020 11:23:11 +0800
Subject: [PATCH 1/4] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E4=BA=86finaly=E7=9A=84?=
=?UTF-8?q?=E9=94=99=E5=88=AB=E5=AD=97?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
docs/book/15-Exceptions.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/docs/book/15-Exceptions.md b/docs/book/15-Exceptions.md
index 3d2895fb..ecb6ff8f 100644
--- a/docs/book/15-Exceptions.md
+++ b/docs/book/15-Exceptions.md
@@ -1393,7 +1393,7 @@ StormyInning.walk() 不能通过编译是因为它抛出了一个 Inning.walk()
有一点很重要,即你要时刻询问自己“如果异常发生了,所有东西能被正确的清理吗?"尽管大多数情况下是非常安全的,但涉及构造器时,问题就出现了。构造器会把对象设置成安全的初始状态,但还会有别的动作,比如打开一个文件,这样的动作只有在对象使用完毕并且用户调用了特殊的清理方法之后才能得以清理。如果在构造器内抛出了异常,这些清理行为也许就不能正常工作了。这意味着在编写构造器时要格外细心。
-你也许会认为使用 finally 就可以解决问题。但问题并非如此简单,因为 finally 会每次都执行清理代码。如果构造器在其执行过程中半途而废,也许该对象的某些部分还没有被成功创建,而这些部分在 finaly 子句中却是要被清理的。
+你也许会认为使用 finally 就可以解决问题。但问题并非如此简单,因为 finally 会每次都执行清理代码。如果构造器在其执行过程中半途而废,也许该对象的某些部分还没有被成功创建,而这些部分在 finally 子句中却是要被清理的。
在下面的例子中,建立了一个 InputFile 类,它能打开一个文件并且每次读取其中的一行。这里使用了 Java 标准输入/输出库中的 FileReader 和 BufferedReader 类(将在 [附录:I/O 流 ](./Appendix-IO-Streams.md) 中讨论),这些类的基本用法很简单,你应该很容易明白:
From 5a47e0a2a1d0b03afd03de0e34c5aaab36068914 Mon Sep 17 00:00:00 2001
From: LaJiOJ <1184264181@qq.com>
Date: Tue, 3 Nov 2020 15:29:01 +0800
Subject: [PATCH 2/4] =?UTF-8?q?=E4=BF=AE=E5=A4=8DMao=E7=9A=84=E9=94=99?=
=?UTF-8?q?=E5=88=AB=E5=AD=97=EF=BC=8C=E5=AE=9E=E9=99=85=E5=BA=94=E4=B8=BA?=
=?UTF-8?q?Map?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
docs/book/Appendix-Collection-Topics.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/docs/book/Appendix-Collection-Topics.md b/docs/book/Appendix-Collection-Topics.md
index 511de489..083462a7 100644
--- a/docs/book/Appendix-Collection-Topics.md
+++ b/docs/book/Appendix-Collection-Topics.md
@@ -2324,7 +2324,7 @@ dancing
| **LinkedHashMap** | 与 **HashMap** 类似,但是当遍历时,可以按插入顺序或最近最少使用(LRU)顺序获取键值对。只比 **HashMap** 略慢,一个例外是在迭代时,由于其使用链表维护内部顺序,所以会更快些。 |
| **TreeMap** | 基于红黑树的实现。当查看键或键值对时,它们按排序顺序(由 **Comparable** 或 **Comparator** 确定)。 **TreeMap** 的侧重点是按排序顺序获得结果。 **TreeMap** 是唯一使用 `subMap()` 方法的 **Map** ,它返回红黑树的一部分。 |
| **WeakHashMap** | 一种具有 *弱键*(weak keys) 的 **Map** ,为了解决某些类型的问题,它允许释放 **Map** 所引用的对象。如果在 **Map** 外没有对特定键的引用,则可以对该键进行垃圾回收。 |
-| **ConcurrentHashMap** | 不使用同步锁定的线程安全 **Mao** 。这在[第二十四章 并发编程]() 一章中讨论。 |
+| **ConcurrentHashMap** | 不使用同步锁定的线程安全 **Map** 。这在[第二十四章 并发编程]() 一章中讨论。 |
| **IdentityHashMap** | 使用 `==` 而不是 `equals()` 来比较键。仅用于解决特殊问题,不适用于一般用途。 |
散列是在 **Map** 中存储元素的最常用方法。
From 18f5e588e3ec6c2728a803beac236db6af353d08 Mon Sep 17 00:00:00 2001
From: LaJiOJ <1184264181@qq.com>
Date: Wed, 4 Nov 2020 11:54:13 +0800
Subject: [PATCH 3/4] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E2=80=98=E6=97=A2?=
=?UTF-8?q?=E2=80=99=E7=9A=84=E9=94=99=E5=88=AB=E5=AD=97?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
docs/book/20-Generics.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/docs/book/20-Generics.md b/docs/book/20-Generics.md
index 43bb33ba..72263fcc 100644
--- a/docs/book/20-Generics.md
+++ b/docs/book/20-Generics.md
@@ -3537,7 +3537,7 @@ NeedCasting.java:10: warning: [unchecked] unchecked cast
1 warning
```
-你会被强制要求转型,但是又被告知不应该转型。为了解决这个问题,必须使用 Java 5 引入的新的转型形式,既通过泛型类来转型:
+你会被强制要求转型,但是又被告知不应该转型。为了解决这个问题,必须使用 Java 5 引入的新的转型形式,即通过泛型类来转型:
```java
// generics/ClassCasting.java
From 5df5cae244534b03cc1629dba61724812f025894 Mon Sep 17 00:00:00 2001
From: LaJiOJ <1184264181@qq.com>
Date: Tue, 10 Nov 2020 10:50:13 +0800
Subject: [PATCH 4/4] =?UTF-8?q?=E7=BB=9F=E4=B8=80=E9=A3=8E=E6=A0=BC?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
docs/book/23-Annotations.md | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/docs/book/23-Annotations.md b/docs/book/23-Annotations.md
index 1b585691..af5fb8dc 100644
--- a/docs/book/23-Annotations.md
+++ b/docs/book/23-Annotations.md
@@ -117,8 +117,8 @@ Java 语言中目前有 5 种标准注解(前面介绍过),以及 5 种元
| 注解 | 解释 |
| ----------- | ------------------------------------------------------------ |
-| @Target | 表示注解可以用于哪些地方。可能的 **ElementType** 参数包括:
**CONSTRUCTOR**:构造器的声明
**FIELD**:字段声明(包括 enum 实例)
**LOCAL_VARIABLE**:局部变量声明
**METHOD**:方法声明
**PACKAGE**:包声明
**PARAMETER**:参数声明
**TYPE**:类、接口(包括注解类型)或者 enum 声明 |
-| @Retention | 表示注解信息保存的时长。可选的 **RetentionPolicy** 参数包括:
**SOURCE**:注解将被编译器丢弃
**CLASS**:注解在 class 文件中可用,但是会被 VM 丢弃。
**RUNTIME**:VM 将在运行期也保留注解,因此可以通过反射机制读取注解的信息。 |
+| @Target | 表示注解可以用于哪些地方。可能的 **ElementType** 参数包括:
**CONSTRUCTOR**:构造器的声明;
**FIELD**:字段声明(包括 enum 实例);
**LOCAL_VARIABLE**:局部变量声明;
**METHOD**:方法声明;
**PACKAGE**:包声明;
**PARAMETER**:参数声明;
**TYPE**:类、接口(包括注解类型)或者 enum 声明。 |
+| @Retention | 表示注解信息保存的时长。可选的 **RetentionPolicy** 参数包括:
**SOURCE**:注解将被编译器丢弃;
**CLASS**:注解在 class 文件中可用,但是会被 VM 丢弃;
**RUNTIME**:VM 将在运行期也保留注解,因此可以通过反射机制读取注解的信息。 |
| @Documented | 将此注解保存在 Javadoc 中 |
| @Inherited | 允许子类继承父类的注解 |
| @Repeatable | 允许一个注解可以被使用一次或者多次(Java 8)。 |