産品特色
        內容簡介
     《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”的蛻變之路,為你的職業生涯注入源源不斷的動力。