产品特色
        内容简介
     《Effective Java(第2版 英文版)》介绍了在Java编程中的78条非常具有实用价值的经验规则,这些经验规则涵盖了大部分开发人员每天所面临的问题的解决方案。通过对Java平台设计专家所使用的技术的全面描述,揭示了应该做什么,不应该做什么,以及怎样才能编写出清晰、健壮和高效的代码。《Effective Java(第2版)英文版》中的每条规则都以简短、独立的小文章形式出现,并通过示例代码进一步进行说明。本书内容全面,结构清晰,讲解详细,可作为技术人员的参考用书。     
目录
   推荐序
前言
1 Introduction
2 Creating and Destroying Objects
Item 1: Consider static factory methods instead of constructors
Item 2: Consider a builder when faced with many constructor parameters
Item 3: Enforce the singleton property with a private constructor or an enum type
Item 4: Enforce noninstantiability with a private constructor
Item 5: Avoid creating unnecessary objects
Item 6: Eliminate obsolete object references
Item 7: Avoid finalizers
3 Methods Common to All Objects
Item 8: Obey the general contract when overriding  equals
Item 9: Always override  hashCode when you override  equals
Item 10: Always override  toString
Item 11: Override  clone judiciously
Item 12: Consider implementing  Comparable
4 Classes and Interfaces
Item 13: Minimize the accessibility of classes and members
Item 14: In public classes, use accessor methods, not public fields
Item 15: Minimize mutability
Item 16: Favor composition over inheritance
Item 17: Design and document for inheritance or else prohibit it
Item 18: Prefer interfaces to abstract classes
Item 19: Use interfaces only to define types
Item 20: Prefer class hierarchies to tagged classes
Item 21: Use function objects to represent strategies
Item 22: Favor static member classes over nonstatic
5 Generics
Item 23: Don’t use raw types in new code
Item 24: Eliminate unchecked warnings
Item 25: Prefer lists to arrays
Item 26: Favor generic types
Item 27: Favor generic methods
Item 28: Use bounded wildcards to increase API flexibility
Item 29: Consider typesafe heterogeneous containers
6 Enums and Annotations
Item 30: Use enums instead of  int constants
Item 31: Use instance fields instead of ordinals
Item 32: Use  EnumSet instead of bit fields
Item 33: Use  EnumMap instead of ordinal indexing
Item 34: Emulate extensible enums with interfaces
Item 35: Prefer annotations to naming patterns
Item 36: Consistently use the  Override annotation
Item 37: Use marker interfaces to define types
7 Methods
Item 38: Check parameters for validity
Item 39: Make defensive copies when needed
Item 40: Design method signatures carefully
Item 41: Use overloading judiciously
Item 42: Use varargs judiciously
Item 43: Return empty arrays or collections, not nulls
Item 44: Write doc comments for all exposed API elements
8 General Programming
Item 45: Minimize the scope of local variables
Item 46: Prefer for-each loops to traditional  for loops
Item 47: Know and use the libraries
Item 48: Avoid  float and  double if exact answers are required
Item 49: Prefer primitive types to boxed primitives
Item 50: Avoid strings where other types are more appropriate
Item 51: Beware the performance of string concatenation
Item 52: Refer to objects by their interfaces
Item 53: Prefer interfaces to reflection
Item 54: Use native methods judiciously
Item 55: Optimize judiciously
Item 56: Adhere to generally accepted naming conventions
9 Exceptions
Item 57: Use exceptions only for exceptional conditions
Item 58: Use checked exceptions for recoverable conditions and runtime exceptions for programming errors
Item 59: Avoid unnecessary use of checked exceptions
Item 60: Favor the use of standard exceptions
Item 61: Throw exceptions appropriate to the abstraction
Item 62: Document all exceptions thrown by each method
Item 63: Include failure-capture information in detail messages
Item 64: Strive for failure atomicity
Item 65: Don’t ignore exceptions
10 Concurrency
Item 66: Synchronize access to shared mutable data
Item 67: Avoid excessive synchronization
Item 68: Prefer executors and tasks to threads
Item 69: Prefer concurrency utilities to  wait and  notify
Item 70: Document thread safety
Item 71: Use lazy initialization judiciously
Item 72: Don’t depend on the thread scheduler
Item 73: Avoid thread groups
11 Serialization
Item 74: Implement  Serializable judiciously
Item 75: Consider using a custom serialized form
Item 76: Write  readObject methods defensively
Item 77: For instance control, prefer enum types to  readResolve
Item 78: Consider serialization proxies instead of serialized instances
Appendix: Items Corresponding to First Edition
References
Index      
前言/序言
     推荐序
  如果有同事对你说,“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程序设计语言的语法,包括The Java Programming Language [Arnold05](作者Arnold、Gosling和Holmes),以及The Java Language Specification [JLS](作者Gosling、Joy和Bracha)。同样地,与Java程序设计语言相关的类库和API的书籍也有很多。
  本书解决了你的第三种需求,即如何以惯用和高效的方式来表达日常的事物(用法)。多年来,作者Joshua Bloch在Sun Microsystems公司一直从事Java语言的扩展、实现和使用的工作;他还大量地阅读了其他人的代码,包括我的代码。他在本书中提出了许多很好的建议,他系统地把这些建议组织起来,旨在告诉读者如何更好地构造代码以便它们能工作得更好,也便于其他人能够理解这些代码,而且将来对代码进行修改和改善时也不至于那么头疼。甚至,你的程序也会因此而变得更加令人愉悦、更加优美和雅致。
  Guy L. Steele Jr
  Burlington, Massachusetts
  2001年4月    
				
 
				
				
					《精通 Java》(Effective Java,Second Edition)—— 塑造卓越 Java 开发实践的宝典  在瞬息万变的软件开发领域,掌握一门强大的编程语言并将其运用至臻化境,是每一位专业开发者孜孜以求的目标。Java,作为业界久负盛名的面向对象编程语言,以其跨平台性、稳定性和庞大的生态系统,在各种规模的应用开发中扮演着举足轻重的角色。然而,仅仅熟悉 Java 的语法和 API 远不足以成就一名真正出色的 Java 开发者。真正的精通,体现在对语言深层机制的理解,对最佳实践的熟练运用,以及能够写出清晰、高效、可维护且健壮的代码。  《精通 Java》(Effective Java,Second Edition)英文版,正是这样一本旨在帮助开发者实现从“知道”到“做到”跨越的里程碑式著作。本书并非一本零基础的 Java 入门教程,它更像是一位经验丰富的架构师和导师,以其深刻的洞察力和严谨的逻辑,引导读者深入 Java 的核心,揭示那些能够显著提升代码质量和开发效率的“秘密武器”。本书的核心价值在于,它将抽象的设计原则和编程技巧,转化为一系列具体、可操作的“条款”(items),每一个条款都围绕着一个明确的主题,提供翔实的解释、清晰的代码示例以及背后深刻的设计理念。  洞察 Java 核心,解锁高效编程模式  《精通 Java》的强大之处在于,它并非泛泛而谈,而是精准地聚焦于 Java 语言的特有机制和设计模式。本书围绕着构建高质量 Java 代码的各个关键方面,提供了一系列精炼而深刻的建议。     对象创建与销毁的智慧: 对象是面向对象编程的基本单元。本书深入探讨了对象的创建、初始化和销毁过程,提供了如何利用静态工厂方法、构建器模式(Builder Pattern)等技术,来优化对象的创建,避免常见的陷阱,如过长的构造函数参数列表、难以理解的初始化顺序等。同时,它也强调了正确管理对象生命周期、避免内存泄露的重要性。     API 设计的艺术: 一个良好的 API 是软件可维护性和可扩展性的基石。《精通 Java》从多个维度剖析了 API 设计的要点。它指导读者如何设计不可变对象(Immutable Objects),以增强代码的线程安全性和可预测性;如何使用常量(Constants)来提升代码的可读性和避免“魔法数字”;如何通过适当的封装(Encapsulation)来保护内部状态;以及如何设计健壮的接口(Interfaces)和抽象类(Abstract Classes),以支持未来的扩展。     避免常见的陷阱: Java 语言本身存在一些容易被开发者忽视或误解的特性,这些特性往往是导致 Bug 的温床。《精通 Java》清晰地指出了这些陷阱,并提供了避免它们的方法。例如,它会深入讲解 `equals()` 和 `hashCode()` 方法的正确实现,这是集合类(Collections)和哈希表(Hash Tables)等数据结构正常工作的关键;它会解释重写(Override)和重载(Overload)方法的注意事项,以及如何正确处理继承关系;它还会讨论防止类型擦除(Type Erasure)带来的问题,以及在泛型(Generics)使用中的最佳实践。     并发编程的审慎: 在多线程环境下编写代码,需要极高的谨慎和对细节的关注。《精通 Java》为并发编程提供了宝贵的指导。它解释了如何正确使用同步机制(Synchronization),以避免竞态条件(Race Conditions)和死锁(Deadlocks);如何利用并发工具类(Concurrency Utilities),如 `ExecutorService` 和 `ConcurrentHashMap`,来构建高效且安全的并发应用;以及如何理解和管理线程的生命周期。     健壮性与可维护性的强化: 软件项目的生命周期远不止编码阶段。《精通 Java》强调了编写健壮、易于维护的代码的重要性。它会指导读者如何有效地处理异常(Exceptions),如何使用断言(Assertions)来捕获程序逻辑错误,以及如何编写清晰、自文档化的代码,从而降低理解成本,加速开发和维护过程。  深入剖析,细致入微的论述  《精通 Java》并非简单罗列技巧,而是对每一个技术点进行了深入的剖析。作者会从 Java 语言规范、JVM 的工作原理以及设计模式的演进等多个角度,来解释为什么某种做法是“精通”的,而另一种做法则可能导致问题。  例如,当讨论静态工厂方法时,作者不仅仅是给出了一个简单的例子,还会详细阐述静态工厂方法相比于公共构造函数的优势,比如可以命名,可以返回缓存的对象,可以返回子类的实例,以及可以灵活地根据参数返回不同类型的对象。这些细节的展开,使得读者能够真正理解其背后的设计思想,并能举一反三地应用于自己的开发实践。  再比如,在讲解不可变对象的优势时,作者会从线程安全、简洁性、可缓存性以及对某些 API(如哈希表)的友好性等多个方面进行论证,并且会提供具体的代码示例,展示如何通过私有构造函数、防御性拷贝(Defensive Copying)等技术来实现不可变对象。  结构清晰,条理分明  《精通 Java》的结构设计也堪称典范。全书被划分为多个章节,每个章节都围绕一个大的主题展开,而每个章节内部则由一系列独立的“条款”(items)组成。这种“条款式”的结构,使得本书具有极高的可读性和检索性。读者可以根据自己的需求,选择性地阅读感兴趣的章节或条款,而无需按部就班地从头读到尾。  每一个条款都遵循着一套清晰的写作模式:首先阐述一个具体的问题或建议,然后给出清晰的代码示例(包括“避免”和“推荐”的做法),最后解释为什么这种做法是可取的,以及可能存在的权衡。这种严谨的结构,确保了信息的准确传递和有效吸收。  谁需要《精通 Java》?  这本书是为所有对 Java 编程充满热情,并希望提升自身技术水平的开发者准备的。     有一定 Java 基础的开发者: 如果你已经掌握了 Java 的基本语法,并有实际开发经验,那么《精通 Java》将是帮助你迈向更高级阶段的绝佳选择。它能帮你“查漏补缺”,纠正一些可能存在的“坏习惯”,并让你领略到 Java 语言设计的精妙之处。     寻求代码质量提升的团队: 对于团队而言,统一和推行最佳实践是提升整体代码质量的关键。《精通 Java》提供了大量可供团队成员学习和讨论的议题,有助于建立共同的技术语言和标准。     希望深入理解 Java 语言特性的开发者: 如果你对 Java 语言的底层机制、JVM 的工作方式以及各种设计模式感到好奇,《精通 Java》将为你提供一个绝佳的视角,让你更深入地理解 Java 的“为何”和“如何”。  总结  《精通 Java》(Effective Java,Second Edition)英文版,是一部凝结了作者深厚技术功底和丰富实践经验的经典之作。它以其深刻的洞察力、严谨的论证和清晰的结构,为 Java 开发者提供了一份宝贵的行为指南。本书不仅仅是一本技术书籍,更是一种编程哲学和一种对卓越的不懈追求的体现。通过阅读和实践本书中的每一个条款,开发者可以显著提升编写高质量 Java 代码的能力,从而在日益激烈的技术竞争中脱颖而出,成为一名真正意义上的“精通者”。它将陪伴你走过从“会写 Java”到“写好 Java”的蜕变之路,为你的职业生涯注入源源不断的动力。