DANCE WITH JAVA

          開發出高質量的系統

          常用鏈接

          統計

          積分與排名

          好友之家

          最新評論

          Effective Java 1-5

          第一條:
          內容:靜態工廠替代構造函數
          例子:String.valueOf()?? getInstance()等
          靜態工廠方法優點:
          1,可以隨意起名字,更好的描述返回對象
          2,每次調用的時候不一定要創建一個新對象
          3,可以返回一個原返回類型的子類型對象
          靜態工廠方法的缺點:
          1,如果類沒有公有或者受保護的構造函數就不能被子類化
          2,不符合規范,破壞規范。在API文檔中不會被那么明確的標識出來。

          第二條:使用私有構造函數強化單態
          單態的模式大家都知道了,但是使用單態的時候記住要使用私有的構造函數。
          原因很簡單,如果不如此很難保證單態。只要new一下另一個對象就生成了

          第三條:有些類是不能實例化的,如果你要做到這點,記得使用私有的構造函數。
          例如:java.util.Collections??????? java.lang.Math 等

          第四條:避免創造重復的對象
          特別是這樣的代碼不要寫: String str = new String("a string");
          因為這樣每次執行的時候都創建了一個"a string"對象。
          可以寫成這樣:String str = "a string?";
          另外順便說一句,這個時候你再次定義String? str2 = "a string";會復用上邊的字符串.

          第五條:在有些情況下手動消除對象的引用
          public?class?Stack{
          ????
          private?Object[]?elements;
          ????
          private?int?size?=?0;
          ????
          public?Stack(int?initialCapacity){
          ????????
          this.elements?=?new?Object[initialCapacity];
          ????}

          ????
          public?void?push(Object?e){
          ????????ensureCapacity();
          ????????elements[size
          ++]?=?e;
          ????}

          ????
          public?Object?pop(){
          ????????
          if?(size?==?0)
          ????????????
          throw?new?EmptyStackException();
          ????????
          return?elements[--size];
          ????}

          ????
          private?void?ensureCapacity(){
          ????????
          if?(elements.length?==?size){
          ????????????Object[]?oldElements?
          =?elements;
          ????????????elements?
          =?new?Object[2*element.length+1];
          ????????System.arraycopy(oldElements,
          0,elements,0,size);
          ????????}

          ????}

          }
          如果這個Stack先大量增長,然后收縮,然后在比較小的范圍內使用,必定造成大量的不可回收的對象,造成內存泄漏.。
          解決辦法:改造一下pop()方法
          public?Object?pop(){
          ???????
          if(size?=?=?0)
          ???????????
          throw?new?EmptyStackException();
          ??????? Object?result?
          =?elements[--size];
          ?????????????????//加上這一句
          ?????? ?elements.[size]
          =null;
          ????? ??
          return?result;
          }

          posted on 2007-01-28 23:58 dreamstone 閱讀(686) 評論(0)  編輯  收藏 所屬分類: jdk相關

          主站蜘蛛池模板: 梧州市| 临猗县| 麟游县| 金坛市| 马关县| 灵宝市| 德钦县| 锡林郭勒盟| 邯郸县| 长岛县| 息烽县| 扎囊县| 曲松县| 西宁市| 板桥市| 泽州县| 晋城| 赞皇县| 竹北市| 万山特区| 山丹县| 遵义市| 兰溪市| 曲阳县| 呼和浩特市| 柏乡县| 屏东市| 确山县| 通化县| 织金县| 汤原县| 金塔县| 平顺县| 尉氏县| 石河子市| 福清市| 开阳县| 涿州市| 鄂尔多斯市| 常德市| 盈江县|