【Effective Java】Ch1_简介

        本书旨在帮助你最高效地使用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成员及构造函数



你可能感兴趣的:(java,effective)