Vincent.Chan‘s Blog

          常用鏈接

          統計

          積分與排名

          網站

          最新評論

          Practical Java

          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)


          posted on 2006-02-20 21:10 Vincent.Chen 閱讀(143) 評論(0)  編輯  收藏 所屬分類: Java

          主站蜘蛛池模板: 伊宁市| 屏东县| 夏河县| 洪泽县| 江源县| 凤庆县| 吉林省| 灵川县| 隆子县| 乾安县| 密云县| 上杭县| 萍乡市| 潮安县| 榆林市| 斗六市| 施甸县| 城固县| 上饶市| 新巴尔虎右旗| 平塘县| 永寿县| 巴青县| 道孚县| 三亚市| 光山县| 临漳县| 荣昌县| 凤台县| 行唐县| 陆河县| 苏尼特右旗| 高雄县| 黑河市| 泸西县| 廊坊市| 南丰县| 宿州市| 绥江县| 江北区| 平罗县|