出版時間:2009-1 出版社:機械工業(yè) 作者:Joshua Bloch 頁數(shù):287 譯者:俞黎敏
Tag標簽:無
前言
如果有一個同事這樣對你說,“我的配偶今天晚上在家里制造了一頓不同尋常的晚餐,你愿意來參加嗎?”(Spouse of me this night today manufactures the unusual meal in a home.You will join?)這時候你腦子里可能會浮現(xiàn)起三件事情:第一,滿腦子的疑惑;第二,英語肯定不是這位同事的母語;第三,同事是在邀請你參加他的家庭晚宴。如果你曾經(jīng)學習過第二種語言,并且嘗試過在課堂之外使用這種語言,你就該知道有三件事情是必須掌握的:這門語言的結(jié)構(gòu)如何(語法),如何命名你想談論的事物(詞匯),以及如何以慣用和高效的方式來表達日常的事物(用法)。在課堂上大多只涉及前面兩點,當你使出渾身解數(shù)想讓對方明白你的意思時,常常會發(fā)現(xiàn)當?shù)厝藢δ愕谋硎鋈炭〔唤?。程序設計語言也是如此。你需要理解語言的核心:它是面向算法的,還是面向函數(shù)的,或者是面向?qū)ο蟮?你需要知道詞匯表:標準類庫提供了哪些數(shù)據(jù)結(jié)構(gòu)、操作和功能(Facility)?你還需要熟悉如何用習慣和高效的方式來構(gòu)建代碼。關(guān)于程序設計語言的書籍通常只是涉及前面兩點,或者只是蜻蜓點水般地介紹一下用法。也許是因為前面兩點比較容易編寫。語法和詞匯是語言本身固有的特性,但是,用法則反映了使用這門語言的群體的特征。例如,Java程序設計語言是一門支持單繼承的面向?qū)ο蟪绦蛟O計語言,在每個方法的內(nèi)部,它也支持命令式的(面向語句的,statement-Oriented)編碼風格。Java類庫提供了對圖形顯示、網(wǎng)絡、分布式計算和安全性的支持。但是,·如何把這門語言以最佳的方式運用到實踐中呢?還有一點:程序與口語中的句子以及大多數(shù)書籍和雜志都不同,它會隨著時間的推移而發(fā)生變化。僅僅編寫出能夠有效地工作并且能夠被別人理解的代碼往往是不夠的,我們還必須把代碼組織成易于修改的形式。針對某個任務可能會有10種不同的編碼方法,而在這10種方法中,有7種方法是笨拙的、低效的或者是難以理解的。而在剩下的3種編碼方法中,哪一種會是最接近該任務的下一年度發(fā)行版本的代碼呢?目前有大量的書籍可以供你學習Java程序設計語言的語法,包括《he Java Programming L,anguage》[Arnold05](作者Amold、Gosling和Holmes),以及《The Java Language Specification》[JLS](作者Gosling、Joy和Bracha)。同樣,與Java程序設計語言相關(guān)的類庫租API的書籍也不少。本書解決了你的第三種需求:習慣和高效的用法。作者Joshua Bloch在Sun公司多年來一直從事Java語言的擴展、實現(xiàn)和使用的工作;他還大量地閱讀了其他人的代碼,包括我的代碼。他在本書中提出了許多很好的建議,他系統(tǒng)地把這些建議組織起來,旨在告訴讀者如何更好地構(gòu)造代碼以便它們能工作得更好,也便于其他人能夠理解這些代碼,便于將來對代碼進行修改和改善的時候不至于那么頭疼。甚至,你的程序也會因此而變得更加令人愉悅、更加優(yōu)美和雅致。
內(nèi)容概要
本書介紹了在Java編程中78條極具實用價值的經(jīng)驗規(guī)則,這些經(jīng)驗規(guī)則涵蓋了大多數(shù)開發(fā)人員每天所面臨的問題的解決方案。通過對Java平臺設計專家所使用的技術(shù)的全面描述,揭示了應該做什么,不應該做什么才能產(chǎn)生清晰、健壯和高效的代碼。 本書中的每條規(guī)則都以簡短、獨立的小文章形式出現(xiàn),并通過例子代碼加以進一步說明。本書內(nèi)容全面,結(jié)構(gòu)清晰,講解詳細??勺鳛榧夹g(shù)人員的參考用書。
作者簡介
Joshua Bloch是Google公司的首席Java架構(gòu)師。是Jolt大獎的獲得者。他曾是Sun公司的杰出工程師,和Transarc公司的高級系統(tǒng)設計師。Bloch曾帶領(lǐng)團隊設計和實現(xiàn)過無數(shù)的Java平臺特性,包括JDK 5.0語言增強版和獲獎的Java Collections Framework。他的著作還包括:《Java Puzzler
書籍目錄
譯者序序前言致謝第1章 引言第2章 創(chuàng)建和銷毀對象 第1條:考慮用靜態(tài)工廠方法代替構(gòu)造器 第2條:遇到多個構(gòu)造器參數(shù)時要考慮用構(gòu)建器 第3條:用私有構(gòu)造器或者枚舉類型強化Singleton屬性 第4條:通過私有構(gòu)造器強化不可實例化的能力 第5條:避免創(chuàng)建不必要的對象 第6條:消除過期的對象引用 第7條:避免使用終結(jié)函數(shù)第3章 對于所有對象都通用的方法 第8條:改寫equals時請遵守通用約定 第9條:改寫equals時總要改寫hashCode 第10條:始終要改寫toString 第11條:謹慎地改寫clone 第12條:考慮實現(xiàn)Comparable接口第4章 類和接口 第13條:使類和成員的可訪問性最小化 第14條:在公有類中使用訪問方法而非公有域 第15條:使非可變性最小化 第16條:復合優(yōu)先于繼承 第17條:要么為繼承而設計,并提供文檔說明,要么就禁止繼承 第18條:接口優(yōu)于抽象類 第19條:接口只用于定義類型 第20條:類層次優(yōu)于標簽類 第21條:用函數(shù)對象表示策略 第22條:優(yōu)先考慮靜態(tài)成員類第5章 泛型 第23條:請不要在新代碼中使用原生態(tài)類型 第24條:消除非受檢警告 第25條:列表優(yōu)先于數(shù)組 第26條:優(yōu)先考慮泛型 第27條:優(yōu)先考慮泛型方法 第28條:利用有限制通配符來提升API的靈活性 第29條:優(yōu)先考慮類型安全的異構(gòu)容器第6章 枚舉和注解 第30條:用enum代替int常量 第31條:用實例域代替序數(shù) 第32條:用EnumSet代替位域 第33條:用EnumMap代替序數(shù)索引 第34條:用接口模擬可伸縮的枚舉 第35條:注解優(yōu)先于命名模式 第36條:堅持使用Override注解 第37條:用標記接口定義類型第7章 方法 第38條:檢查參數(shù)的有效性 第39條:必要時進行保護性拷貝 第40條:謹慎設計方法簽名 第41條:慎用重載 第42條:慎用可變參數(shù)(varargs) 第43條:返回零長度的數(shù)組或者集合,而不是null 第44條:為所有導出的API元素編寫文檔注釋第8章 通用程序設計 第45條:將局部變量的作用域最小化 第46條:for-each循環(huán)優(yōu)先于傳統(tǒng)的for循環(huán) 第47條:了解和使用類庫 第48條:如果需要精確的答案,請避免使用float和double 第49條:原語類型優(yōu)先于裝箱的原語類型 第50條:如果其他類型更適合,則盡量避免使用字符串 第51條:了解字符串連接的性能 第52條:通過接口引用對象 第53條:接口優(yōu)先于反射機制 第54條:謹慎地使用本地方法 第55條:謹慎地進行優(yōu)化 第56條:遵守普遍接受的命名慣例第9章 異?!〉?7條:只針對異常的條件才使用異?!〉?8條:對可恢復的條件使用受檢異常,對編程錯誤使用運行時異?!〉?9條:避免不必要地使用受檢的異?!〉?0條:盡量使用標準的異常 第61條:拋出與抽象相對應的異?!〉?2條:每個方法拋出的所有異常都要有文檔 第63條:在細節(jié)消息中包含失?。东@信息 第64條:努力使失敗保持原子性 第65條:不要忽略異常第10章 并發(fā) 第66條:同步訪問共享的可變數(shù)據(jù) 第67條:避免過多同步 第68條:executor和task優(yōu)先于線程 第69條:并發(fā)工具優(yōu)先于wait和notify 第70條:線程安全性的文檔化 第71條:慎用延遲初始化 第72條:不要依賴于線程調(diào)度器 第73條:避免使用線程組第11章 序列化 第74條:謹慎地實現(xiàn)Serializable 第75條:考慮使用自定義的序列化形式 第76條:保護性地編寫readObject方法 第77條:對于實例控制,枚舉類型優(yōu)先于readResolve 第78條:考慮用序列化代理代替序列化實例
章節(jié)摘錄
插圖:第2章 創(chuàng)建和銷毀對象第4條:通過私有構(gòu)造器強化不可實例化的能力有時候,你可能需要編寫只包含靜態(tài)方法和靜態(tài)域的類。這些類的名聲很不好,因為有些人在面向?qū)ο蟮恼Z言中濫用這樣的類來編寫過程化的程序。盡管如此,它們也確實有它們特有的用處。我們可以利用這種類,以java.1ang.Math或者java.util.Arrays的方式,把基本類型的值或者數(shù)組類型上的相關(guān)方法組織起來。我們也可以通過java.util.Collections的方式,把實現(xiàn)特定接口的對象上的靜態(tài)方法(包括工廠方法,見第1條)組織起來。最后,還可以利用這種類把final類上的方法組織起來,以取代擴展該類的做法。這樣的工具類(utility class)不希望被實例化,實例對它沒有任何意義。然而,在缺少顯式構(gòu)造器的情況下,編譯器會自動提供一個公有的、無參的缺省構(gòu)造器(default constructor)。對于用戶而言,這個構(gòu)造器與其他的構(gòu)造器沒有任何區(qū)別。在已發(fā)行的API中常常可以看到一些被無意識地實例化的類。企圖通過將類做成抽象類來強制該類不可被實例化,這是行不通的。該類可以被子類化,并且該子類也可以被實例化。這樣做甚至會誤導用戶,以為這種類是專門為了繼承而設計的(見第17條)。然而,有一些簡單的習慣用法可以確保類不可被實例化。由于只有當類不包含顯式的構(gòu)造器時,編譯器才會生成缺省的構(gòu)造器,因此我們只要讓這個類包含私有構(gòu)造器,它就不能被實例化了。
媒體關(guān)注與評論
“我很希望10年前就擁有這本書??赡苡腥苏J為我不需要任何Java方面的書籍,但是我需要這本書?!薄 狫ava之父 James Gosling
編輯推薦
《Effective Java中文版(第2版)》內(nèi)容全面,結(jié)構(gòu)清晰,講解詳細??勺鳛榧夹g(shù)人員的參考用書。編碼平添樂趣,程序更加完美,高效成為習慣,工作如此輕松。你是否正在尋找一本能夠更加深入地了解Java編程語言的書,以便編寫出更清晰、更正確、更健壯且更易于重用的代碼。不用找了!《Effective Java中文版(第2版)》為我們帶來了共78條程序員必備的經(jīng)驗法則,針對你每天都會遇到的編程問題提出了最有效、最實用的解決方案。 這本經(jīng)典Jolt獲獎作品實屬眾望所歸。作者對新版進行了徹底的更新。涵蓋了自第l版之后所引入的Java E5和Java SE 6的特性,同時開發(fā)了新的設計模式和語言習慣用法,介紹了如何充分利用從泛型到枚舉、從注解到自動裝箱的各種特性。每一章都包含幾個“條目”,以簡潔的形式呈現(xiàn),自成獨立的短文,它們提出了具體的建議,對于Java平臺精妙之處的獨到見解,以及優(yōu)秀的代碼范例。每個條目的綜合描述和解釋都闡明了應該怎么做,不應該怎么做,以及為什么。
圖書封面
圖書標簽Tags
無
評論、評分、閱讀與下載
Effective Java 第二版 中文版/Sun公司核心技術(shù)叢書 PDF格式下載