-- 會員 / 註冊 --  
 帳號:
 密碼:
  | 註冊 | 忘記密碼
3/26 新書到! 3/19 新書到! 3/14 新書到! 12/12 新書到!
購書流程Q & A站務留言版客服信箱
3ds MaxMayaRhinoAfter EffectsSketchUpZBrushPainterUnity
PhotoShopAutoCadMasterCamSolidWorksCreoUGRevitNuke
C#CC++Java遊戲程式Linux嵌入式PLCFPGAMatlab
駭客資料庫搜索引擎影像處理FluentVR+ARANSYS深度學習
單晶片AVROpenGLArduinoRaspberry Pi電路設計CadenceProtel
HadoopPythonStm32CortexLabview手機程式AndroidiPhone
可查書名,作者,ISBN,3dwoo書號
詳細書籍分類

Effective Java中文版(原書第3版)

( 簡體 字)
作者:〔美〕約書亞·布洛克(Joshua Bloch)著類別:1. -> 程式設計 -> JAVA -> Java
譯者:
出版社:機械工業出版社Effective Java中文版(原書第3版) 3dWoo書號: 50472
詢問書籍請說出此書號!

缺書
NT售價: 595

出版日:12/1/2018
頁數:288
光碟數:0
站長推薦:
印刷:黑白印刷語系: ( 簡體 版 )
加入購物車 加到我的最愛
(請先登入會員)
ISBN:9787111612728
作者序 | 譯者序 | 前言 | 內容簡介 | 目錄 | 
(簡體書上所述之下載連結耗時費功, 恕不適用在台灣, 若讀者需要請自行嘗試, 恕不保證)
作者序:

譯者序:

前言:

第3版前言

1997年,Java才面世不久,James Gosling(Java之父)稱之為“超級簡單的藍領語言”〔Gosling97〕。幾乎與此同時,Bjarne Stroustrup(C++之父)則將C++稱為“多范式語言”(multi-paradigm language),因為“它與那些只支持單一編程方法的程序語言有著天壤之別”〔Stroustrup95〕。Stroustrup曾發出過這樣的警告:

正如大多數剛面世的語言一樣,Java的相對簡單性,很可能一部分是出于錯覺,一部分是因為其尚不完整而導致的結果。隨著時間的推移,Java在規模和復雜度方面都會顯著增長。到那時,其規模可能呈雙倍甚至三倍增長,并產生大量依賴于實現的擴展或者類庫〔Stroustrup〕。

現在,二十年過去了,坦白地說,Gosling和Stroustrup說的都沒有錯。Java現在果然是既龐大又復雜,許多東西都帶有多個抽象,從并發執行,到迭代,再到日期和時間的表示法。

隨著Java平臺的發展,我的熱情有所降溫,但我依然鐘愛Java。考慮到Java日益增加的規模和復雜度,對于最前沿的最佳實踐指導的需求成了重中之重。在本書中,我將不遺余力地為讀者提供這樣的指導。希望這一版能夠在堅持前兩個版本的精神的前提下,繼續滿足讀者的最新需求。

簡單即美,但要做到大道至簡卻實屬不易。



Joshua Bloch

San Jose, California

2017年11月

附:近年來,我在業界的最佳實踐方面花費了大量的精力。自20世紀50年代誕生這個行業以來,我們已經自由地重新實現了彼此的API。這個實踐對于計算機技術的快速成功至關重要。我始終積極地致力于維護這種自由〔CompSci17〕,并且鼓勵你們也加入到這個行列中來。我們的專業要想持續健康地發展,確保重新實現各自API的權利顯得尤為重要。

第2版前言

自從我于2001年寫了本書的第1版之后,Java平臺又發生了很多變化,是該出第2版的時候了。Java 5中最為重要的變化是增加了泛型、枚舉類型、注解、自動裝箱和for-each

循環。其次是增加了新的并發類庫:java.util.concurrent。我和Gilad Bracha一起,有幸帶領團隊設計了最新的語言特性。我還有幸參加了設計和開發并發類庫的團隊,這個團隊由Doug Lea領導。

Java平臺中另一個大的變化在于廣泛采用了現代的IDE(Integrated Development Envi-ronment),例如Eclipse、IntelliJ IDEA和NetBeans,以及靜態分析工具的IDE,如FindBugs。雖然我還未參與這部分工作,但已經從中受益匪淺,并且很清楚它們對Java開發體驗所帶來的影響。

2004年,我離開Sun公司到了Google公司工作,但在過去的4年中,我仍然繼續參與Java平臺的開發,在Google公司和JCP(Java Community Process)的大力幫助下,繼續并發和集合API的開發。我還有幸利用Java平臺去開發供Google內部使用的類庫。現在我了解了作為一名用戶的感受。

我在2001年編寫第1版的時候,主要目的是與讀者分享我的經驗,便于讓大家避免我所走過的彎路,使大家更容易成功。新版仍然大量采用來自Java平臺類庫的真實范例。

第1版所帶來的反應遠遠超出了我最大的預期。我在收集所有新的資料以使本書保持最新時,盡可能地保持了資料的真實。毫無疑問,本書的篇幅肯定會增加,從57個條目發展到了78個。我不僅增加了23個條目,并且修改了原來的所有資料,并刪去了一些已經過時的條目。在附錄中,你可以看到本書中的內容與第1版的內容的對照情況。

在第1版的前言中我說過:Java程序設計語言和它的類庫非常有益于代碼質量與效率的提高,并且使得用Java進行編碼成為一種樂趣。Java 5和Java 6發行版中的變化是好事,這也使Java平臺日趨完善。現在這個平臺比2001年的要大得多,也復雜得多,但是一旦掌握了使用新特性的模式和習慣用法,它們就會使你的程序變得更完美,使你的工作變得更輕松。我希望第2版能夠體現出我對Java平臺持續的熱情,并將這種熱情傳遞給你,幫助你更加高效和愉快地使用Java平臺及其新的特性。



Joshua Bloch

San Jose, California

2008年4月

第1版前言

1996年,我打點行囊,西行來到了當時的JavaSoft,因為我很清楚那里將會出現奇跡。在這5年間,我是Java平臺庫的架構師。我設計、實現和維護過許多類庫,同時也擔任其他一些庫的技術顧問。隨著Java平臺的成熟和壯大,主持這些類庫的設計工作是一個人一生中難得的機會。毫不夸張地說,我有幸與一些當代最杰出的軟件工程師一起工作。在這個過程中,我學到了許多關于Java程序設計語言的知識——它能夠做什么,不能夠做什么,以及如何最有效地使用這門語言及其類庫。

本書是我的一次嘗試,希望與你分享我的經驗,你可以因此而吸取我的經驗,避免重復我的失敗。本書中我借用了Scott Meyers的《Effective C++》一書的格式,該書中包含50個條目,每個條目給出一條用于改進程序和設計的規則。我覺得這種格式非常有效,希望你也有這樣的感覺。

在許多例子中,我冒昧地使用了Java平臺庫中的真實例子來說明相應的條目。在介紹那些做得不是很完美的工作時,我盡量使用我自己編寫的代碼,但是偶爾我也會使用其他同事的代碼。盡管我盡力做得更好一點,但是如果我真的冒犯了他人,我先在這里致以最誠摯的歉意。引用反面例子是出于協作的精神,而不是要羞辱例子中的做法,我希望大家都能夠從我們過去的錯誤經歷中得到啟發。

盡管本書并不只是針對可重用組件開發人員的,但是過去20多年來我編寫此類組件的經歷一定會影響這本書。我很自然地會按照可導出API(Application Programming Interface)的方式來思考問題,而且我建議你也這樣做。即使你并沒有開發可重用的組件,這樣的思考方法也將有助于你提升軟件的質量。進一步來說,毫無意識地編寫可重用組件的情形并不少見:你編寫了一些很有用的代碼,然后在同伴之間共享,不久之后你就有了很多用戶。這時候,你就不能隨心所欲地改變API了,并且如果你剛開始編寫軟件的時候在設計API上付出了較多的努力,那么這時你就會非常慶幸了。

我把焦點放在API的設計上,這對于那些熱衷于新興的輕量級軟件開發方法學(比如Extreme Programming,即“極限編程”,簡稱XP)的讀者來說,也許會顯得有點不太自然。這些方法學強調編寫最簡單的、能夠工作的程序。如果你正在使用此類的某種程序設計方法,那么你會發現,把焦點放在API設計上對于“重構”(refactoring)過程是多么有益。重構的基本目標是改進系統結構,以及避免代碼重復。如果系統的組件沒有設計良好的API,要達到這樣的目標則是不可能的。

沒有一門語言是完美的,但是有些語言非常優秀。我認為Java程序設計語言及其類庫非常有益于提高代碼質量和工作效率,并使得編碼工作成為一種樂趣。我希望本書能夠抓住我的熱情并傳遞給你,幫助你更有效地利用Java語言,使工作變得更加愉快。

Joshua Bloch

Cupertino, California

2001年4月
內容簡介:

本書是Jolt獲獎作品的全新升級版,針對Java 7、8、9全面更新,是Java程序員的必備參考書。

全書共12章,90條。第1章為引言;第2章闡述何時以及如何創建和避免創建對象,如何確保對象能夠適時地銷毀,以及如何管理對象銷毀之前必須進行的各種清除動作;第3章闡述所有對象都通用的方法,如equals、hashCode、toString、clone和finalize以及Comparable.compareTo方法等;第4章闡述作為Java語言的核心以及Java語言的基本抽象單元(類和接口)在使用上的一些指導原則,以設計出更加有用、健壯和靈活的類與接口;第5章和第6章分別闡述在Java 1.5發行版本中新增加的泛型、枚舉和注解的最佳實踐,教你如何最大限度地享有這些優勢;第7章討論在Java 8中新增的函數接口、Lambda、方法引用,和為處理數據元素的序列提供類庫級別支持的Stream API;第8章討論方法設計的幾個方面:如何處理參數和返回值,如何設計方法簽名,如何為方法編寫文檔,從而使方法設計在可用性、健壯性和靈活性上有進一步的提升;第9章主要討論Java語言的具體細節,包括局部變量的處理、控制結構、類庫的使用、各種數據類型的用法、反射機制和本地方法的用法,以及優化和命名慣例;第10章闡述如何充分發揮異常的優點來提高程序的可讀性、可靠性和可維護性,以及減少異常使用不當所帶來的負面影響,并提供了一些關于有效使用異常的指導原則;第11章闡述寫出清晰、正確、文檔組織良好的并發程序;第12章講解序列化方面的技術,其中包括序列化代理模式,它可以幫助你避免對象序列化的許多缺陷。



本書第2版是在Java 6發行之后不久出版的,此后Java又發生了巨大的變化。這本Jolt獲獎作品現在已經針對Java 7、8、9進行了全面的更新,充分展示了新的Java編程語言及其類庫特性。當前的Java編程語言支持多種范型,這使得Java程序員迫切需要具體的實踐建議,而本書正是為此而生的。

與本書前兩版一樣,書中每一章都包含幾個“條目”,每個條目都以簡潔的形式呈現,自成獨立的短文。它們提出了具體的建議,揭示了Java平臺的精妙之處,并更新了之前的代碼范例。每個條目的綜合描述和解釋都闡明了應該怎么做,不應該怎么做,以及為什么。

本書的內容涵蓋了Java 7、8和9中新增的語言及類庫特性,包括在其面向對象根部添加的函數編程構造。書中增加了許多新的條目,如其中有一章是專門講解Lambda表達式和Stream的。

本書新增內容包括:

 函數接口、Lambda表達式、方法引用,以及Stream

 接口中的缺省方法和靜態方法

 類型參考,包括泛型的Diamond操作符

 @SafeVarargs注解

 try-with-resources語句

 新增的類庫特性,如Optional接口、java.time包,以及集合的便利工廠方法
目錄:

推薦序
譯者序
前言
致謝
第1章 引言 1
第2章 創建和銷毀對象 4
第1條:用靜態工廠方法代替構造器 4
第2條:遇到多個構造器參數時要考慮使用構建器 8
第3條:用私有構造器或者枚舉類型強化Singleton屬性 13
第4條:通過私有構造器強化不可實例化的能力 15
第5條:優先考慮依賴注入來引用資源 16
第6條:避免創建不必要的對象 18
第7條:消除過期的對象引用 20
第8條:避免使用終結方法和清除方法 23
第9條:try-with-resources優先于try-f?inally 27
第3章 對于所有對象都通用的方法 30
第10條:覆蓋equals時請遵守通用約定 30
第11條:覆蓋equals時總要覆蓋hashCode 40
第12條:始終要覆蓋toString 44
第13條:謹慎地覆蓋clone 46
第14條:考慮實現Comparable接口 53
第4章 類和接口 59
第15條:使類和成員的可訪問性最小化 59
第16條:要在公有類而非公有域中使用訪問方法 62
第17條:使可變性最小化 64
第18條:復合優先于繼承 70
第19條:要么設計繼承并提供文檔說明,要么禁止繼承 75
第20條:接口優于抽象類 79
第21條:為后代設計接口 83
第22條:接口只用于定義類型 85
第23條:類層次優于標簽類 86
第24條:靜態成員類優于非靜態成員類 88
第25條:限制源文件為單個頂級類 91
第5章 泛型 93
第26條:請不要使用原生態類型 93
第27條:消除非受檢的警告 97
第28條:列表優于數組 99
第29條:優先考慮泛型 102
第30條:優先考慮泛型方法 106
第31條:利用有限制通配符來提升API的靈活性 109
第32條:謹慎并用泛型和可變參數 114
第33條:優先考慮類型安全的異構容器 118
第6章 枚舉和注解 123
第34條:用enum代替int常量 123
第35條:用實例域代替序數 131
第36條:用EnumSet代替位域 132
第37條:用EnumMap代替序數索引 134
第38條:用接口模擬可擴展的枚舉 138
第39條:注解優先于命名模式 140
第40條:堅持使用Override注解 147
第41條:用標記接口定義類型 149
第7章 Lambda和Stream 151
第42條:Lambda優先于匿名類 151
第43條:方法引用優先于Lambda 154
第44條:堅持使用標準的函數接口 156
第45條:謹慎使用Stream 159
第46條:優先選擇Stream中無副作用的函數 164
第47條:Stream要優先用Collection作為返回類型 168
第48條:謹慎使用Stream并行 172
第8章 方法 176
第49條:檢查參數的有效性 176
第50條:必要時進行保護性拷貝 179
第51條:謹慎設計方法簽名 182
第52條:慎用重載 184
第53條:慎用可變參數 189
第54條:返回零長度的數組或者集合,而不是null 190
第55條:謹慎返回optinal 192
第56條:為所有導出的API元素編寫文檔注釋 196
第9章 通用編程 202
第57條:將局部變量的作用域最小化 202
第58條:for-each循環優先于傳統的for循環 204
第59條:了解和使用類庫 207
第60條:如果需要精確的答案,請避免使用f?loat和double 209
第61條:基本類型優先于裝箱基本類型 211
第62條:如果其他類型更適合,則盡量避免使用字符串 213
第63條:了解字符串連接的性能 215
第64條:通過接口引用對象 216
第65條:接口優先于反射機制 218
第66條:謹慎地使用本地方法 220
第67條:謹慎地進行優化 221
第68條:遵守普遍接受的命名慣例 223
第10章 異常 227
第69條:只針對異常的情況才使用異常 227
第70條:對可恢復的情況使用受檢異常,對編程錯誤使用運行時異常 229
第71條:避免不必要地使用受檢異常 231
第72條:優先使用標準的異常 232
第73條:拋出與抽象對應的異常 234
第74條:每個方法拋出的所有異常都要建立文檔 235
第75條:在細節消息中包含失敗-捕獲信息 237
第76條:努力使失敗保持原子性 238
第77條:不要忽略異常 239
第11章 并發 241
第78條:同步訪問共享的可變數據 241
第79條:避免過度同步 245
第80條:executor、task和stream優先于線程 250
第81條:并發工具優先于wait和notify 251
第82條:線程安全性的文檔化 256
第83條:慎用延遲初始化 258
第84條:不要依賴于線程調度器 261
第12章 序列化 263
第85條:其他方法優先于Java序列化 263
第86條:謹慎地實現Serializable接口 266
第87條:考慮使用自定義的序列化形式 269
第88條:保護性地編寫readObject方法 274
第89條:對于實例控制,枚舉類型優先于readResolve 279
第90條:考慮用序列化代理代替序列化實例 282
附錄 與第2版中條目的對應關系 286
參考文獻 289
序: