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