Recently Updated Pages
1.2 编程元素
编程语言是不仅仅是操作计算机来执行任务的一种手段,它也充当着一种框架,我们在其中组织计算过程的想法。程序用于在编程社群的成员之间交流这些想法。所以,程序必须为人们阅读而编写,并且顺便可以让机器执...
1.1 入门
计算机科学是一个极其宽泛的学科。全球的分布式系统、人工智能、机器人、图形、安全、科学计算,计算机体系结构和许多新兴的二级领域,每年都会由于新技术和新发现而扩展。计算机科学的快速发展广泛影响了人类...
0. 介绍
本书旨在帮助您有效地使用 Java 编程语言及其基本库:java.lang,java.util 和 java.io 以及如 java.util.concurrent 和 java.util....
Environments
If you haven't read my notes on environment diagrams, now is a good time to read those. Parent Fr...
Higher Order Functions
Remember the add_2 function from the previous section on lambdas? What if we wanted to make a gen...
Lambdas
Let's take a break from all this new condition and loop stuff and go back to something we recogni...
Loops
We learned about conditions and saw how we can use them to make our code run only when we want it...
Conditional Operators
Right now, we know how to use simple conditions in if-else statements. What if we wanted to check...
Conditions
Most of the time, you only want your code to run if something is true (or false). For example, sa...
90. 考虑用序列化代理代替序列化实例
正如 85 条和第 86 条提到的,以及本章一直在讨论的,决定实现 Serializable 接口,会增加出错和出现安全问题的可能性,因为它允许利用语言之外的机制来创建实例,而不是使用普通的...
89. 对于实例控制,枚举类型优于 readResolve
第 3 条讲述了 Singletion(单例)模式,并且给出了以下这个 Singletion 示例。这个类限制了对其构造器的访问,以确保永远只创建一个实例。 public class Elv...
88. 保护性的编写 readObject 方法
第 50 条介绍了一个不可变的日期范围类,它包含可变的私有变量 Date。该类通过在其构造器和访问方法(accessor)中保护性的拷贝 Date 对象,极力维护其约束条件和不可变性。该类代...
87. 考虑使用自定义的序列化形式
当你在时间紧迫的情况下编写类时,通常应该将精力集中在设计最佳的 API 上。有时,这意味着发布一个「一次性」实现,你也知道在将来的版本中会替换它。通常这不是一个问题,但是如果类实现 Seri...
86. 非常谨慎地实现 Serializable
使类的实例可序列化非常简单,只需实现 Serializable 接口即可。因为这很容易做到,所以有一个普遍的误解,认为序列化只需要程序员付出很少的努力。而事实上要复杂得多。虽然使类可序列化的...
85. 优先选择 Java 序列化的替代方案
当序列化在 1997 年添加到 Java 中时,它被认为有一定的风险。这种方法曾在研究语言(Modula-3)中尝试过,但从未在生产语言中使用过。虽然程序员不费什么力气就能实现分布式对象,这...
84. 不要依赖线程调度器
当许多线程可以运行时,线程调度器决定哪些线程可以运行以及运行多长时间。任何合理的操作系统都会尝试公平地做出这个决定,但是策略可能会有所不同。因此,编写良好的程序不应该依赖于此策略的细节。任何...
83. 明智审慎的使用延迟初始化
延迟初始化是延迟字段的初始化,直到需要它的值。如果不需要该值,则不会初始化字段。这种技术既适用于静态字段,也适用于实例字段。虽然延迟初始化主要是一种优化,但是它也可以用于破坏类中的有害循环和...
82. 文档应包含线程安全属性
类在其方法并发使用时的行为是其与客户端约定的重要组成部分。如果你没有记录类在这一方面的行为,那么它的用户将被迫做出假设。如果这些假设是错误的,生成的程序可能缺少足够的同步(详见 78 条)或...
81. 并发工具优于 wait 和 notify
本书第 1 版中专门用了一个条目来说明如何正确地使用 wait 和 notify ( Bloch01,详见第 50 条) 。它提出的建议仍然有效,并且在本条目的最后也对此做了概述,但是这条建...
80. executor 、task 和 stream 优先于线程
本书第 1 版中阐述了简单的工作队列(work queue)[Bloch01 ,详见第 49 条]代码。它利用一个后台线程,允许客户端可以插入异步处理任务到队列中。当不再需要这个工作队列时,...