@@ -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
49492 . ** 栈内存** (* 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
53534 . ** 常量存储** (* Constant storage* ) 常量值通常直接放在程序代码中,因为它们永远不会改变。如需严格保护,可考虑将它们置于只读存储器(ROM)中 [ ^ 3 ] 。
5454
@@ -101,7 +101,7 @@ char c = ch;
101101这两个类都有自己特殊的“方法”,对应于我们针对基本类型数值执行的操作。也就是说,能对 int 或 float 做的运算,在 BigInteger 和 BigDecimal 这里也同样可以做一样可以,只不过必须要通过调用它们的方法来实现而非运算符。此外,由于涉及到的计算量更多,所以运算速度会慢一些。诚然,我们牺牲了速度,但换来了精度。
102102
103103BigInteger 支持任意精度的整数。可用于精确表示任意大小的整数值,同时在运算过程中不会丢失精度。
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