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