本书出自第一线JAVA编程专家之手,为读者展现正确、高效、强固之JAVA代码实践方案。\r\n 这本取材广泛的掼,以不同层级的专家经验,帮助程序员更透彻地理解JAVA,使他们的编码效能发挥到极致。此书以准则/条款形式进行编排,探究改善代码的68个重要主题,提供精晰明快、精心撰写之示例和方案。所有示例和方案都带有详尽的解说,你可以将它们融入自身工作之中。这些编程和设计上的实践方案,描述了经验丰富的程序员实际运用之最佳实践手法。为方便中高阶JAVA程序员阅读,本书内容被精心安排成为各自独立的课程,因此你既可以从头通读至尾,也可以挑选独特专题加以精读。
译序 by侯捷\r\n译序 by刘永丹\r\n细目(Detail Contents)\r\n前言Preface\r\n致谢\r\n1 一般技术(Greneral Tecniques)\r\n 实践1.参数以by value方式而非by reference方式传递\r\n 实践2.对不变的data和object reference使用final\r\n 实践3.缺省情况下所有non-static函数都可被覆写\r\n 实践4.在arrays和Vectors之间慎重选择\r\n 实践5.多态(polymorphism)优instanceof\r\n 实践6.必要时才使用instanceof\r\n 实践7.一旦不再需要object references,就将它设为null\r\n2 对象与相等性(Objects and Equality)\r\n 实践8. 区分reference型和Primitive型别\r\n 实践9. 区分==和equals()\r\n 实践10. 不要依赖equals()的缺省实现\r\n 实践11. 实现equals()时必须深思熟虑\r\n 实践12. 实用equals()时优先考虑使用getClass()\r\n 实践13. 调用super.equals()以唤起base class的相关行为\r\n 实践14. 实践equals()函数中谨慎使用instanceof\r\n 实践15. 在equals()时需遵循某些规则\r\n3 异学处理(Exception Handing)\r\n 实践16. 认识“异常控制流”(exception control flow)机制\r\n 实践17. 绝对不可轻忽异常(Never ignore an exception)\r\n 实践18. 千万不要遮掩异常(Never hide an exception)\r\n 实践19. 明察throws子句的缺点\r\n 实践20. 细致而全面地理解throws子句\r\n 实践21. 使用finally避免资源泄漏(resourec leaks)\r\n 实践22. 不要从try区段中返回\r\n 实践23. 将try/catch区段于循环之外\r\n 实践24. 不要将异常(exceptions)用于流程控制\r\n 实践25. 不要每逢出错就使用异常(exceptions)\r\n……\r\n4 性能(Performance)\r\n5 多线程(Multithreading)\r\n6 类与接口(Classes and Interfaces)\r\n附录:如何学习Java\r\n进阶读物(Furter Reading)\r\n索引(Index)
Peter Haggar是一位公认的Java编程专家,也是IBM资深软件工程师。他拥有广博的编程经验,曾投身于开发工具、类库(class libraries)和操作系统的方面工作。他在IMB致力于emerging Java技术研究,目前专门从事embedded Java和real-time Java的研究。Peter屡屡以Java技术演讲人的身份出现在众多企业界会议上。他在Clarkson大学得计算机学士学位。
让无知尽管信口开河吧,学习自有其价值
Let ignorance talk as it will, learning has its value.
J. de La Fontaine, The Use of Knowledge, Book viii, Fable 19
本书汇集了Java编程实践方面的建议、忠告、范例和讨论。本书的组织是一个个独立课程,每个课程谓之实践(PRAXIS,发音prak-sis),用以讨论特定主题。每个实践按各自独立的方式撰写。你可以从头阅读到尾,也可以挑选某些专题阅读。这种编排风格使你可以在短暂的闲暇中阅读此书。许多实践都少於5页,因此你可以在简短的时间内学习它们。
我在这本书中详细分析了某些设计(design)和编程(programming)方面的问题。我挑选主题的依据是编程实践上的有效(effective)和高效(efficient)性质。Java最被人抱怨的一点是效能(效率,performance),因此我以最大的篇幅讨论这一主题,探索使Java程式码执行得更有效率的技术。
我撰写本书,希望它能够作为指南,帮助你设计和撰码。它可以帮助你更全面地理解Java,让你撰写出更高效、更健壮和(或许最重要的是)更正确的程式码。
本书所有资讯都适用於各种Java编程,并不囿於伺服端(server)、客户端(client)或GUI(图形用户介面)编程。此外,你可以将这些资讯运用於Java的任一发行版本。
本书风格受了Scott Meyers所着的《Effective C++》和《More Effective C++》的影响。我发现他的风格对书籍组织非常有益,因此我决定采用类似的格式。
预期读者
本书是为已经掌握Java语言基础知识的程式员准备的。我假设读者已经具备Java语言和并行编程(concurrent programming)的工作经验,并理解物件导向(object-oreinted)的概念和术语。本书适用於「想获得如何高效使用Java之实用建议、讨论和范例」的程式员。
无论对Java编程老手或新手,本书都为他们提供了Java关键领域的资讯和讨论。本书提供充足的新资讯,即使经验丰富的程式员也能从考查他们业已熟悉的领域中获得极大收益。例如在某些场合,我以独特的方式讨论问题,帮助程式员以不同的方法思考,或使用与以往不同的角度看待事物。
初入门的程式员也可以从本书获益良多。我提供了讨论和范例,帮助他们消除许多常见的编程错误。我也澄清了某些常见的Java错误观念,并强调语言特性方面的某些问题。
本书组织
本书组织为六大部分。
一般技术 展现Java编程的数个基础领域,包括引数传递(parameter passing),arrays,Vectors以及垃圾回收(garbage collection)。
物件与相等性 研究物件(objects)和基础型别(primitive types),以及如何、为何为一个class实作equals()。
异常处理 提供异常处理技术(exception handling techniques)的细致分析,并告诉你如何在你的程式码中高效加入异常处理机制。
效能(效率) 展示可用来改善程式码效能的诸多技术,并仔细审查JVM(Java虚拟机器)、byte code和JITs(及时程式码生成器)。
多执行绪 涵盖执行绪模型(threading model)的诸多方面 它们对於建立健壮、可靠的多执行绪程式极为关键。
类别与介面 解释了interfaces、abstract classes和concrete classes,以及何处、何时使用它们。这部分还详细讨论了immutable object(不可变物件)、cloning(克隆、复制)和finalization(终结)。
在上述各标题之下,是数量不等的相关专题。往往我会在不止一处讨论特定专题的某个属性。例如我在不同场合讨论了synchronized关键字的方方面面,每次讨论都涉及synchronized的不同特性。为此,我提供了扩展性甚强的交叉叁照,你可以由此得知何时阅读特定专题、何处存在相关资讯。
目录之後便是细目。这一部分包含所有实践标题和其页码,并附有每个实践的核心概要。你可以使用这个细目唤起你对专题的记忆,或用以找出某个专题。
附录内含一个已经证实的技术,可以进一步扩展你的Java知识。之後还有一份「进一步阅读」列表,列出关於Java、一般设计和编程方面的书籍和期刊。
三言两语话PRAXIS(实践)
PRAXIS(实践)一词,是我查询「得以概括本书所做工作」的词汇的结果。1982年的《American Heritage Dictionary》将PRAXIS定义为:The practical application or exercise of a branch of learning(实际应用或训练;学习的一个支脉)。这正是我希望在本书中达成的。
最确切的恐怕是《Webster's New Collegiate Dictionary》於1958年给出的一份定义:Practice, especially of an art, science, or technical occupation; opposite to theory(实际履行,尤指艺术、科学或技术领域;与理论遥相对应)。这个定义准确概括了本书精髓。那句opposite to theory更是画龙点睛。「理论」本身当然没错,但本书没有为它准备位置。
范例程式码
正文所列的所有程式码,都采用本书写作时可获得之Java最新版本加以编译和运行。所有程式码都曾经在Windows NT 4.0环境下以Sun Java 2 SDK,Standard Edition,v1.2.1完成编译和运行。如果你想要得到原始码,请在以下网址进行注册:
http://www.awl.com/cseng/register
该网页要求你输入一个独一无二的码,此码可在本书末尾标明为「How to Register Your Book」的页面找到。
提供反馈
欢迎读者对本书提供相关反馈资讯。任何建议、批评或臭虫报告,都请寄到PracticalJava@awl.com。
希望本书让你觉得有用、可读,并且具备实用价值。