DANCE WITH JAVA

          開發出高質量的系統

          常用鏈接

          統計

          積分與排名

          好友之家

          最新評論

          Effective Java 6-7

          六,避免使用終結(finalizer)函數
          原因:終結函數通常是不可預測的,一般情況下不要使用,使用的結果會帶來很多問題,不穩定,性能差,移植問題等等。
          分析原因:
          1,從一個對象不可到達到它的終結函數被執行,這段時間是任意的,不確定的,所以時間關鍵的系統不應該使用終結函數。
          2,及時的執行終結函數是垃圾回收算法決定的,這種算法在不同的JVM實現中會大相徑庭,使用終結函數的結果就是導致移植性問題
          3,如果執行終結函數的線程一直低于當前的線程的優先級,很可能造成占用大量內存,極端情況是出現OutOfMemoryError
          4,JSL不保證終結函數一定被執行,所以不要依賴終結函數來更新關鍵性的永久狀態,例如數據庫的永久鎖
          5,不要相信System.gc()??? System.runFinalization這兩個函數,它們只能提高終結函數的執行機會,并不保證一定執行。唯一保證一定執行的是System.runFinalizersOnExit喝Runtime.runFinalizersONExit()但這兩個方法已經被聲明不建議使用.
          6,一個在終結函數中的一場不會打出任何信息
          七:在改寫equals方法的時候遵守通用約定
          分析:
          1,有些情況下不要隨意改寫equals
          (1),一個類的每個實例本質上是唯一的,例如Thread
          (2),不管新一個類是否提供了“邏輯相等”的測試功能,例如java.util.Random
          (3),超類已經改寫了equals,從超類繼承過來的行為對于子類也是適合的 例如Set從AbstractSet繼承了equals
          (4),一個類是私有的,或者是包級私有的,并且確定它的equals方法永遠不會被調用
          2, 通用的約定
          自反性:? 對于任意的引用值x ,x.equals(x)一定為true
          對稱性:? 對于任意的引用值x,y? x.equals(y)返回true是 y.equals(x)也一定返回true
          傳遞性:對于任意的引用值x,y,z? 如果x.equals(y)返回true?并且y.equals(z)返回true 那么 x.equals(z)也一定是true
          一致性:對于任意的x,y如果x,y沒有被更改,調用任意多次x.equals(y)返回的結果應該一樣。
          非空性:對任意的引用x ,x.equals(null)一定返回false
          3不要將equals聲明中的Object對象換成別的類型
          4,不要讓equals方法依賴不可靠資源


          posted on 2007-01-30 22:09 dreamstone 閱讀(720) 評論(1)  編輯  收藏 所屬分類: jdk相關

          評論

          # re: Effective Java 6-7 2007-01-31 09:04 ant

          謝謝樓主的分享!
          希望這樣的專題可以繼續下去,期待!  回復  更多評論   

          主站蜘蛛池模板: 临西县| 佛冈县| 平利县| 巨鹿县| 天津市| 洪泽县| 龙胜| 重庆市| 绥滨县| 郯城县| 双江| 珲春市| 高要市| 玉屏| 锡林郭勒盟| 丘北县| 定安县| 广南县| 江安县| 同德县| 蓝山县| 凤凰县| 增城市| 沈阳市| 贺兰县| 龙海市| 高碑店市| 城口县| 岱山县| 育儿| 高安市| 竹北市| 建瓯市| 那坡县| 衡阳市| 山阳县| 泽普县| 淮安市| 昆山市| 金门县| 武城县|