如果有一个同事这样对你说,“我的配偶今天晚上在家里制造了一顿不同寻常的晚餐,你愿意来参加吗?”(Spouse of me this night today manufactures the unusual meal in a home.You will join?)这时候你脑子里可能会浮现起三件事情:**,满脑子的疑惑;第二,英语肯定不是这位同事的母语;第三,同事是在邀请你参加他的家庭晚宴。
如果你曾经学习过第二种语言,并且尝试过在课堂之外使用这种语言,你就该知道有三件事情是必须掌握的:这门语言的结构如何(语法),如何命名你想谈论的事物(词汇),以及如何以惯用和**的方式来表达日常的事物(用法)。在课堂上大多只涉及前面两点,当你使出浑身解数想让对方明白你的意思时,常常会发现当地人对你的表述忍俊不禁。
程序设计语言也是如此。你需要理解语言的核心:它是面向算法的,还是面向函数的,或者是面向对象的?你需要知道词汇表:标准类库提供了哪些数据结构、操作和功能(Facility)?你还需要熟悉如何用习惯和**的方式来构建代码。关于程序设计语言的书籍通常只是涉及前面两点,或者只是蜻蜓点水般地介绍一下用法。也许是因为前面两点比较容易编写。语法和词汇是语言本身固有的特性,但是,用法则反映了使用这门语言的群体的特征。
例如,Java程序设计语言是一门支持单继承的面向对象程序设计语言,在每个方法的内部,它也支持命令式的(面向语句的,statement-Oriented)编码风格。Java类库提供了对图形显示、网络、分布式计算和**性的支持。但是,·如何把这门语言以*佳的方式运用到实践中呢?
还有一点:程序与口语中的句子以及大多数书籍和杂志都不同,它会随着时间的推移而发生变化。仅仅编写出能够有效地工作并且能够被别人理解的代码往往是不够的,我们还必须把代码组织成易于修改的形式。针对某个任务可能会有10种不同的编码方法,而在这10种方法中,有7种方法是笨拙的、低效的或者是难以理解的。而在剩下的3种编码方法中,哪一种会是*接近该任务的下一年度发行版本的代码呢?
目前有大量的书籍可以供你学习Java程序设计语言的语法,包括《he Java Programming L,anguage》[Arnold05](作者Amold、Gosling和Holmes),以及《The Java Language Specification》[JLS](作者Gosling、Joy和Bracha)。同样,与Java程序设计语言相关的类库租API的书籍也不少。
本书解决了你的第三种需求:习惯和**的用法。作者Joshua Bloch在Sun公司多年来一直从事Java语言的扩展、实现和使用的工作;他还大量地阅读了其他人的代码,包括我的代码。他在本书中提出了许多很好的建议,他系统地把这些建议组织起来,旨在告诉读者如何更好地构造代码以便它们能工作得更好,也便于其他人能够理解这些代码,便于将来对代码进行修改和改善的时候不至于那么头疼。甚至,你的程序也会因此而变得更加令人愉悦、更加优美和雅致。
Guy L.Steele Jr.
Builington,Massachusetts
2001年4月