本书旨在帮助你最高效地使用Java语言及其基础类库,包括java.lang、java.util,以及小部分的java.util.concurrent、java.io。本书也会不时地讨论其他类库,不过不会涵盖图形用户界面、企业级API以及移动设备相关类库。
本书包含78个条目,每个条目讨论一个规则,这些规则代表了最优秀最有经验的程序员们的有益实践。这些规则松散地归为十个章节,每个章节涉及软件设计的一个大的方面。本书并不打算让你从头到尾逐条阅读,每个条目都或多或少是独立的,条目间有许多交叉引用,你可以很容易地通过本书规划自己的课程。
Java5平台新增了一些新特性,本书中的许多条目用到了这些新特性,下表列出了可以在何处找到这些新特性的相关内容:
Feature |
Chapter or Item |
Generics |
Chapter 5 |
Enums |
Items 30–34 |
Annotations |
Items 35–37 |
For-each loop |
Item 46 |
Autoboxing |
Items 40, 49 |
Varargs |
Item 42 |
Static import |
Item 19 |
大部分条目都会通过程序示例来说明。本书的一大特色是代码示例中包含了许多设计模式和习惯用法,在适当的地方通过交叉引用指向此领域的标准参考成果。
有些条目包含一个或多个在实践中应该避免的程序示例。这样的例子有时被称作“反模式”,都清楚地用“//Never do this!”的注释标注了。每个例子中,都解释了为什么这种示例是不好的,并且给出了可选的解决方法。
本书并不是针对初学者的:本书假定读者已经很熟悉Java语言了。如果你还不熟悉,可以先看一看好的Java入门书籍。本书适用于任何拥有一定Java工作经验的程序员,甚至对高级程序员它也能提供有益的帮助。
本书的大部分规则都源于几条基本原则。1)清晰和简洁是最最重要的,模块的使用者不应该被模块的行为吓到,模块应该尽可能地小直到不能再小(本书中模块表示任何能服用的软件组件,从独立的方法,到由多个包组成的复杂系统)。2)代码应该被重用而不是被拷贝。3)模块间的相互依赖应该保持最小。4)错误应该尽早被发现,最好是在编译阶段。
本书中的规则虽然不能应用于100%的场景,但是他们描述了绝大多数最佳编程实践的特性。你不应机械地服从这些规则,但是应该只有耦合清空下,并且有充分的原因时才违反这些规则。就像学习其他科目一样,学习编程艺术首先要学习规则,再才能学习何时打破规则。
本书大多数部分都不是讨论性能,而是讨论写出清晰、正确、可用、健壮、灵活并且可维护的程序。如果你能做到这些,那么达到性能要求通常就很简单了(Item55)。有些条目确实讨论到了性能,少数条目提供了性能指数,同时会标明“在我的机器上”,最好把这些指数看做近似值。有必要指出的是,我的机器是一台老式的2.2GHZ AMD双核处理器,2G内存,Microsoft Windows® XP Professional SP2系统,运行JDK1.6_05版本,这个JDK有两个虚拟机:Java
HotSpot客户端以及Server VMs,上述性能指标是在Server VM上测得的。
在讨论Java及其类库的特性时,有时需要指明特定版本号。为了简便,本书使用工程版本号而不用官方版本名称,下表列出了二者之间的映射关系:
Official Release Name Engineering Version Number
JDK 1.1.x / JRE 1.1.x 1.1
Java 2 Platform, Standard Edition, v 1.2 1.2
Java 2 Platform, Standard Edition, v 1.3 1.3
Java 2 Platform, Standard Edition, v 1.4 1.4
Java 2 Platform, Standard Edition, v 5.0 1.5
Java Platform, Standard Edition 6 1.6
本书的例子已相当完整,但是他们更注重可读性而不是完整性,他们直接使用了java.util和java.io包中的类,如果你想编译这些例子,需要手工添加如下导入语句:
import java.util.*;
import java.util.concurrent.*;
import java.io.*;
本书的站点http://java.sun.com/docs/books/effective中有每个示例的完整版本,你可以编译并运行这些例子。
本书用到的术语多半是在The Java Language Specification, Third Edition中定义的。少数术语值得特别提出来:Java支持4中类型:interfaces(包含annotations)、classes(包含enums)、arrays和primitives。前三种被称为引用类型,类实例和数组是对象,而基本类型则不是对象;类的成员包括:fields, methods, member classes,
和member interfaces;方法签名由方法名、输入参数类型组成,而不包括方法返回类型。
本书也用到了与The Java Language Specification不同的几个术语,例如本书使用继承(inheritance)来代替子类化(subclassing);不使用接口继承(inheritace for intefaces),而是简单地说类实现了一个接口,或接口继承了另一个接口;描述未指定的访问级别时,不适用默认访问(default
access),而使用包级私有(package-private)。
还用到了一些The Java Language Specification中没有定义的术语,术语“导出API(Exported API)”或简称API,是指类、接口、构造函数、成员或序列化形式,程序员通过他们可以访问一个类、接口或包。(API是Application
Programming Interface的缩写,这里不用“接口”而用API,是为了不与java中的interface类型混淆)。使用API编写程序的程序员被称为API的用户user,使用了API的类被称为API的客户client。
类、接口、构造函数、成员和序列化形式统称为API元素,导出API由能在定义API的包之外访问的那些API元素组成,任何客户都能使用这些API元素,API作者负责支持这些API元素。无独有偶Not coincidentally,Javadoc工具在默认模式下生成的正式这些元素。不严格地讲,一个包的导出API包括包中所有public类和接口的的public或protected成员及构造函数。
分享到:
相关推荐
在IT领域,尤其是在数据库设计与优化方面,Tom Kyte的《Effective Oracle by Design》是一部备受推崇的经典之作。其中第八章,名为《Effective SQL》,深入探讨了SQL查询的优化原理及实践,为读者提供了构建高效SQL...
### Chapter 1: Writing an ANSI C++ Program This chapter introduces the reader to the fundamentals of writing a C++ program. It covers: - **Getting Ready to Program:** Discusses the setup required to ...
根据提供的文件信息,我们可以深入探讨Maven的基本概念及其在构建Java项目中的具体应用。Maven是一种流行的自动化构建工具,主要用于Java项目的构建、依赖管理和项目信息管理。以下将围绕标题、描述以及部分内容中...
more_effective_c++.rar//en:chm/ch:pdf THINKINJAVA.rar//chm C++ Primer第四版中英文对照 .zip//chm Effective+STL(中英文).rar//pdf Modern C++ Design_CHN.pdf Modern C++ Design_ENG.pdf 整理了一下换了个...
- **LEA SI,[2000H]**:LEA(Load Effective Address)指令用于计算有效地址并将其加载到指定的寄存器中。这里将2000H这个地址加载到SI寄存器中。语法正确。 - **OUT DX,AL**:该指令表示将AL寄存器中的数据输出到...
相比于高级语言如C、Java等,汇编语言更贴近于底层硬件操作,能够实现对硬件资源的精细控制,但在编写和维护上更为复杂。高级语言则通过编译器自动处理了许多底层细节,使得程序员可以更加专注于算法设计和逻辑实现...