Effective Java (第2版)(英文版)

分类: 图书,计算机与互联网,程序语言与软件开发,语言与开发工具,Java,
品牌: 布洛克(Bloch.J.)
基本信息·出版社:人民邮电出版社
·页码:346 页
·出版日期:2009年09月
·ISBN:7115211310/9787115211316
·条形码:9787115211316
·包装版本:第2版
·装帧:平装
·开本:16
·正文语种:英语
产品信息有问题吗?请帮我们更新产品信息。
内容简介《Effective Java (第2版)(英文版)》介绍了在Java编程中78条经典的、实用性极高的经验规则,这些经验规则可以帮助开发人员来解决每天都有可能面对的大多数问题。书中对Java平台设计专家所使用的技术的介绍,揭示了如何事半功倍地的编写清晰、健壮和高效的代码。《Effective Java (第2版)(英文版)》是经典图书Effective Java的第2版,涵盖了Java 5中的重要变化,并删除了一些过时的内容。《Effective Java (第2版)(英文版)》所介绍的每条规则,都以简明易懂的语言来阐释,并通过示例代码进一步加以说明。《Effective Java (第2版)(英文版)》内容翔实,层次分明,是一本可以帮助技术人员更深层次理解Java的参考用书。
作者简介Joshua Bloch是Google公司的首席Java构架师,也是Jolt图书大奖的获得者。他曾是Sun公司的杰出工程师和Transarc公司的高级系统设计师。Bloch带领着他的优秀团队,设计和实现过无数的Java平台特性。包括JDK5.0语言增强版和获奖的Java Collections Framework。
编辑推荐《Effective Java (第2版)(英文版)》:如果您正在寻找一本能够帮助您深入了解和掌握Java的经典图书,不用找了!《Effective Java (第2版)(英文版)》为您提供了78条程序员必知的黄金法则。这些法则针对您每天都要遇到的编程问题,提出最有效、最实用的解决方案,帮助您编写出更清晰、更准确、更实用且易于重用的代码。
《Effective Java (第2版)(英文版)》是Jolt获奖图书《Effective Java》的最新版本,涵盖了第1版之后出现的Java SE5和JavaSE6的新特性,同时介绍了新的设计模式和语言习惯用法,以及如何充分利用从泛型到枚举、从注解到自动装箱的各种特性。
书中的每一章节都简洁明了、各自独立。作者针对Java平台的精妙之处提出了具体的使用建议和独到的见解,并提供了优秀的代码范例。
《Effective Java (第2版)(英文版)》的主要内容有:
全新的泛型、枚举、注解、自动装箱、for-each循环、可变参数和并发机制等;
经典主题的全新技术和最佳实践,包括对象、类、类库、方法和序列化;
如何避免如陷阱和缺陷之类常被误解的细微知识;
Java语言本身和最基本的类库及其扩展。
Jolt获奖图书的最新版本 78条程序员必知的黄金法则
助您编写出更优秀代码的经典读本
目录
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 overrideequals
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 toreadResolve
Item 78: Consider serialization proxies instead of serialized instances
Appendix: Items Corresponding to First Edition
References
Index
……[看更多目录]
序言在我于2001年写了本书的第1版之后,Java平台又发生了很多变化,我想是该出第2版的时候了。Java 5中新增加了泛型、枚举类型、注解、自动装箱和for-each循环。此外还增加了新的并发类库:java.util.concurrent。我有幸和Gilad Bracha一起,带领团队设计了最新的语言特性,并参加了设计和开发并发类库的团队,这个团队是由Dong Lea领导的。
Java平台中另一个大的变化是广泛采用了现代的IDE(Integrated Development Environment),例如,Eclipse、IntelliJ IDEA和NetNeans,以及静态分析工具的IDE,如FindBugs。虽然我还未参与到这部分工作,但已经从中受益匪浅,并且很清楚它们对于Java开发体验所带来的影响。
2004年,我到了Google公司工作,但在过去的4年中,我仍然继续参与了Java平台的开发,在Google公司和JCP(Java Community Process)的大力帮助下,继续并发和集合API的开发。我还有幸利用Java平台去开发供Google内部使用的类库,从而了解了作为一名用户的感受。
我在2001年编写本书第1版时,主要目的是与读者分享我的经验,让大家避免我所走过的弯路,使大家更容易成功。本版仍然大量采用来自Java平台类库的真实范例。
第1版所带来的反应远远超出了我的预期。我在收集所有新的资料以使本书保持最新时,尽可能地保持了资料的真实。毫无疑问,本书的篇幅从以前的57个条目发展到了78条目。我不仅增加了23个条目,并且修改了原来的所有资料,并删去了一些已经过时的条目。
我在第1版的前言中说过:Java程序设计语言和它的类库非常有益于代码质量和效率的提高,并且使得Java进行编码成为一种乐趣。最新版本中的变化使得Java平台日趋完善。现在这个平台比2001年的要大得多,也复杂得多,但是一旦掌握了使用新特性的模式和用法,它们就会使你的程序变得更完美,使你的工作变得更轻松。我希望本版能够体现出我对Java平台持续的热情,并将这种热情传递给你,帮助你更加高效和愉快地使用Java平台及其新的特性。
文摘插图:

If the improved version of the Person class is initialized but its i s BabyBoomer method is never invoked, the BOOM_START and BOOM_END fields will be initialized unnecessarily. It would be possible to eliminate the unnecessary initializations by lazily initializing these fields (Item 71) the first time the i s BabyBoome r method is invoked, but it is not recommended. As is often the case with lazy initialization, it would complicate the implementation and would be unlikely to result in a noticeable performance improvement beyond what we've already achieved (Item 55).
In the previous examples in this item, it was obvious that the objects in question could be reused because they were not modified after initialization. There are other situations where it is less obvious. Consider the case of adapters [Gamma95, p. 139], also known as views. An adapter is an object that delegates to a backing, object, providing an alternative interface to the backing object. Because an adapter has no state beyond that of its backing object, there's no need to create more than one instance of a given adapter to a given object.
For example, the keySet method of the Map interface returns a Set view of the Map object, consisting of all the keys in the map. Naively, it would seem that every call to keySet would have to create a new Set instance, but every call to keySet on a given Map object may return the same Set instance. Although the returned Set instance is typically mutable, all of the returned objects are functionally identical: when one of the returned objects changes, so do all the others because they're all backed by the same Map instance. While it is harmless to create multiple instances of the keySet view object, it is also unnecessary.