産品特色
內容簡介
《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月
Effective Java(第2版 英文版) 下載 mobi epub pdf txt 電子書