Skip to content

Commit 0571404

Browse files
authored
Merge pull request lingcoder#4 from nickChenyx/check
文字校对
2 parents 7b4a1c0 + 336dd9c commit 0571404

File tree

2 files changed

+6
-8
lines changed

2 files changed

+6
-8
lines changed

book/02-Installing-Java-and-the-Book-Examples.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# 第二章 安装Java和本书用例
22

3-
现在,我们来为这次阅读之旅作些准备吧
3+
现在,我们来为这次阅读之旅做些准备吧
44

55
在开始学习 Java 之前,你必须要先安装好 Java 和本书的源代码示例。因为考虑到可能有“专门的初学者”从本书开始学习编程,所以我会仔细解释计算机命令行 Shell 的这个过程。 如果你已经有此方面的经验了,可以跳过这段安装说明。如果你对此处描述的任何术语或过程仍不清楚,还可以通过 Google 搜索找到答案。具体的问题或困难请试着在 StackOverflow 上提问。或者去 YouTube 看有没有相关的安装说明。
66

book/03-Objects-Everywhere.md

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ Java 语法允许我们使用带双引号的文本内容来初始化字符串。
3232
<!-- You Must Create All the Objects -->
3333
## 对象创建
3434

35-
“引用”用来连接“对象”。在 Java 中,通常我们使用`new`这个操作符来来创建一个新的对象`new`关键字代表:创建一个新的对象实例。所以,前面的代码实例我们也可以这样来表示:
35+
“引用”用来连接“对象”。在 Java 中,通常我们使用`new`这个操作符来创建一个新的对象`new`关键字代表:创建一个新的对象实例。所以,前面的代码实例我们也可以这样来表示:
3636

3737
```java
3838
String s = new String("asdf");
@@ -48,7 +48,7 @@ Java 语法允许我们使用带双引号的文本内容来初始化字符串。
4848

4949
2. **栈内存***Stack*) 存在于常规内存(RAM)区域中,可通过栈指针获得处理器的直接支持。栈指针下移创建新内存,上移释放该内存,顺序后进先出,速度仅次于寄存器。创建程序时,Java 编译器必须准确地知道栈内保存的所有数据的“长度”以及生命周期。栈内存的这种约束限制了程序的灵活性。因此,虽然在栈内存上存在一些 Java 数据,特别是对象引用,但 Java 对象本身却是保存在堆内存的。
5050

51-
3. **堆内存***Heap*) 这是一种常规用途的内存池(也在 RAM区域),所有 Java 对象都存在于其中。与栈内存不同,编译器不需要知道对象必须在堆内存上停留多长时间。因此,用堆内存保存数据更具灵活性。创建一个对象时,只需用 new 命令实例化代码即可。执行这些代码时,数据会在堆内存里自动进行保存。这种灵活性是有代价的:分配和清理堆内存要比栈内存需要更多的时间(如果你甚至可以用 Java 在栈内存上创建对象,就像在C++ 中那样)。随着时间的推移,Java 的堆内存分配机制现已非常快,因此这不是一个值得关心的问题了。
51+
3. **堆内存***Heap*) 这是一种常规用途的内存池(也在 RAM区域),所有 Java 对象都存在于其中。与栈内存不同,编译器不需要知道对象必须在堆内存上停留多长时间。因此,用堆内存保存数据更具灵活性。创建一个对象时,只需用 `new` 命令实例化代码即可。执行这些代码时,数据会在堆内存里自动进行保存。这种灵活性是有代价的:分配和清理堆内存要比栈内存需要更多的时间(如果你甚至可以用 Java 在栈内存上创建对象,就像在C++ 中那样)。随着时间的推移,Java 的堆内存分配机制现已非常快,因此这不是一个值得关心的问题了。
5252

5353
4. **常量存储***Constant storage*) 常量值通常直接放在程序代码中,因为它们永远不会改变。如需严格保护,可考虑将它们置于只读存储器(ROM)中 [^3]
5454

@@ -101,7 +101,7 @@ char c = ch;
101101
这两个类都有自己特殊的“方法”,对应于我们针对基本类型数值执行的操作。也就是说,能对 int 或 float 做的运算,在 BigInteger 和 BigDecimal 这里也同样可以做一样可以,只不过必须要通过调用它们的方法来实现而非运算符。此外,由于涉及到的计算量更多,所以运算速度会慢一些。诚然,我们牺牲了速度,但换来了精度。
102102

103103
BigInteger 支持任意精度的整数。可用于精确表示任意大小的整数值,同时在运算过程中不会丢失精度。
104-
BigDecimal 支持任意精度的定点数字。例如,可用它进行精确的币值计算。至于具体使用什么方法,跟多详情,请参考 JDK 官方文档。
104+
BigDecimal 支持任意精度的定点数字。例如,可用它进行精确的币值计算。至于具体使用什么方法,更多详情,请参考 JDK 官方文档。
105105

106106

107107
<!-- Arrays in Java -->
@@ -185,7 +185,7 @@ Java 的变量只有在其作用域内才可用。缩进使得 Java 代码更易
185185
<!-- Scope of Objects -->
186186
### 对象作用域
187187

188-
Java 对象与基本类型具有不同的生命周期。当我们使用 `new` 关键字来创建 Java 对象时,它的存续将会超出作用域的末尾。因此,下面这段代码示例
188+
Java 对象与基本类型具有不同的生命周期。当我们使用 `new` 关键字来创建 Java 对象时,它的生命周期将会超出作用域的末尾。因此,下面这段代码示例
189189

190190
```JAVA
191191
{
@@ -197,9 +197,7 @@ Java 对象与基本类型具有不同的生命周期。当我们使用 `new`
197197

198198
只要你还需要它们,这些用 `new` 关键字创建出来的对象就不会消失。因此,这个在 C++ 编程中大量存在的问题在 Java 中消失了。在 C++ 中你不仅要确保对象在你操作的范围内存在,而且还必须在完成后销毁对象。
199199

200-
随之而来的问题:如果 Java 并没有清理周围的这些对象,那么它是如何避免 C++ 中出现的内存泄漏和程序终止的问题呢?答案是:Java 的垃圾收集器会查找所有 `new` 出来的对象并判断哪些不再可达。然后释放那些对象所占用的内存。这意味着我们不必再需要自己操作回收内存了。我们只需要简单的创建对象,当这些对象不再被需要时,它们能自行被垃圾收集器释放。
201-
。这意味着您不必担心回收内存你自己。您只需创建对象,当您不再需要时他们,他们自己消失。这可以防止重要的一类编程问题:所谓的“内存泄漏”时程序员忘记释放内存。
202-
200+
随之而来的问题:如果 Java 并没有清理周围的这些对象,那么它是如何避免 C++ 中出现的内存泄漏和程序终止的问题呢?答案是:Java 的垃圾收集器会查找所有 `new` 出来的对象并判断哪些不再可达。然后释放那些对象所占用的内存。这意味着我们不必再需要自己操作回收内存了。我们只需要简单的创建对象,当这些对象不再被需要时,它们能自行被垃圾收集器释放。这意味着您不必担心回收内存。您只需创建对象,当您不再需要时他们,他们自己消失。
203201
这就有效地防止了一类重要的编程问题:因程序员忘记释放内存而造成的“内存泄漏”。
204202

205203
<!-- Creating New Data Types: class -->

0 commit comments

Comments
 (0)