Practical Java
1一般技術(shù)(GeneralTechniques)
實踐1:參數(shù)以byvalue方式而非byreference方式傳遞
實踐2:對不變的data和objectreference使用final
實踐3:缺省情況下所有non-static函數(shù)都可被覆寫
實踐4:在arrays和vectors之間慎重選擇
實踐5:多態(tài)(po1ymorphism)優(yōu)于instanceof
實踐6:必要時才使用instanceof
實踐7:一旦不再需要objectreferences,就將它設(shè)為null
2對象與相等性(ObjectsandEquality)
實踐8:區(qū)分reference型別和primitive型別
實踐9:區(qū)分==和equals()
實踐10:不要依賴equals()的缺省實現(xiàn)
實踐11:實現(xiàn)equals()時必須深思熟慮
實踐12:實現(xiàn)equals()時優(yōu)先考慮使用getClass()
實踐13:調(diào)用super.equals()以喚起baseclass的相關(guān)行為
實踐14:在equals()函數(shù)中謹慎使用instanceof
實踐15:實現(xiàn)equals()時需遵循某些規(guī)則
3異常處理(ExceptionHandling)
實踐16:認識[異??刂屏鱙(exceptioncontrolflow)機制
實踐17:絕對不可輕忽異常(Neverignoreanexception)
實踐18:千萬不要遮掩異常(Neverhideanexception)
實踐19:明察throws子句的缺點
實踐20:細致而全面地理解throws子句
實踐21:使用finally避免資源泄漏(resourceleaks)
實踐22:不要從try區(qū)段中返回
實踐23:將try/catch區(qū)段置于循環(huán)之外
實踐24:不要將異常(exceptions)用于流程控制
實踐25:不要每逢出錯就使用異常(exceptions)
實踐26:在構(gòu)造函數(shù)(constructors)中拋出異常
實踐27:拋出異常之前先將對象恢復(fù)為有效狀態(tài)(validstate)
4性能(Performance)
實踐28:先把焦點放在設(shè)計.數(shù)據(jù)結(jié)構(gòu)和算法身上
實踐29:不要倚賴編譯期(compile-time)優(yōu)化技術(shù)
實踐30:理解運行期(mntime)代碼優(yōu)化技術(shù)
實踐31:如欲進行字符串接合,StringBuffer優(yōu)于String
實踐32:將對象的創(chuàng)建成本(creationcost)降至最小
實踐33:慎防未用上的對象(unusedobjects)
實踐34:將同步化(synchronization)降至最低
實踐35:盡可能使用stack變量
實踐36:使用static.final和private函數(shù)以促成inlining
實踐37:instance變量的初始化一次就好
實踐38:使用基本型別(primitivetypes)使代碼更快更小
實踐39:不要使用Enumeration或Iterator來遍歷vector
實踐40:使用System.arraycopy()來復(fù)制arrays
實踐41:優(yōu)先使用array,然后才考慮Vector和ArrayList
實踐42:盡可能復(fù)用(reuse)對象
實踐43:使用緩式評估(延遲求值,lazyevaluation)
實踐44:以手工方式將代碼優(yōu)化
實踐45:編譯為本機代碼(Compiletonativecode)
5多線程(Multithreading)
實踐46:面對instance函數(shù),synchronized鎖定的是對象(objects)而非函數(shù)(methods)或代碼(code)
實踐47:弄清楚synchronizedstatics函數(shù)與synchronizedinstance函數(shù)之間的差異
實踐48:以[private數(shù)據(jù)十相應(yīng)訪問函數(shù)(accessor)]替換[public/protected數(shù)據(jù)]
實踐49:避免無謂的同步控制
實踐50:訪問共享變量時請使用synchronized或volatile
實踐51:在單一操作(singleoperation)中鎖定所有用到的對象
實踐52:以固定而全局性的順序取得多個locks(機鎖)以避免死鎖
實踐53:優(yōu)先使用notifyAll()而非notify()
實踐54:針對wait()和notifyAll()使用旋鎖(spinlocks)
實踐55:使用wait()和notifyAll()替換輪詢循環(huán)(pollingloops)
實踐56:不要對lockedobject(上鎖對象)之objectreference重新賦值
實踐57:不要調(diào)用stop()或suspend()
實踐58:通過線程(threads)之間的協(xié)作來中止線程
6類與接口(ClassesandInterfaces)
實踐59:運用interfaces支持多重繼承(multipleinheritance)
實踐60:避免interfaces中的函數(shù)發(fā)生沖突
實踐61:如需提供部分實現(xiàn)(partialimplementation)請使用abstractclasses(抽象類)
實踐62:區(qū)分interface.abstractclass和concreteclass
實踐63:審慎地定義和實現(xiàn)immutableclasses(不可變類)
實踐64:欲傳遞或接收mutableobjects(可變對象)之objectreferences時,請實施clone()
實踐65:使用繼承(inheritance)或委托(delegation)來定義immutableclasses(不可變類)
實踐66:實現(xiàn)clone()時記得調(diào)用super.clone()
實踐67:別只依賴finalize()清理non-memory(內(nèi)存以外)的資源
實踐68:在構(gòu)造函數(shù)內(nèi)調(diào)用non-final函數(shù)時要當(dāng)心
附錄:如何學(xué)習(xí)Java
進階讀物(FurtherReading)
索引(Index)
posted on 2006-02-20 21:10 Vincent.Chen 閱讀(142) 評論(0) 編輯 收藏 所屬分類: Java