DANCE WITH JAVA

          開發(fā)出高質(zhì)量的系統(tǒng)

          導(dǎo)航

          <2007年1月>
          31123456
          78910111213
          14151617181920
          21222324252627
          28293031123
          45678910

          隨筆分類(277)

          隨筆檔案(238)

          閱讀排行榜

          常用鏈接

          統(tǒng)計(jì)

          積分與排名

          好友之家

          最新評(píng)論

          Effective Java 1-5

          第一條:
          內(nèi)容:靜態(tài)工廠替代構(gòu)造函數(shù)
          例子:String.valueOf()?? getInstance()等
          靜態(tài)工廠方法優(yōu)點(diǎn):
          1,可以隨意起名字,更好的描述返回對(duì)象
          2,每次調(diào)用的時(shí)候不一定要?jiǎng)?chuàng)建一個(gè)新對(duì)象
          3,可以返回一個(gè)原返回類型的子類型對(duì)象
          靜態(tài)工廠方法的缺點(diǎn):
          1,如果類沒(méi)有公有或者受保護(hù)的構(gòu)造函數(shù)就不能被子類化
          2,不符合規(guī)范,破壞規(guī)范。在API文檔中不會(huì)被那么明確的標(biāo)識(shí)出來(lái)。

          第二條:使用私有構(gòu)造函數(shù)強(qiáng)化單態(tài)
          單態(tài)的模式大家都知道了,但是使用單態(tài)的時(shí)候記住要使用私有的構(gòu)造函數(shù)。
          原因很簡(jiǎn)單,如果不如此很難保證單態(tài)。只要new一下另一個(gè)對(duì)象就生成了

          第三條:有些類是不能實(shí)例化的,如果你要做到這點(diǎn),記得使用私有的構(gòu)造函數(shù)。
          例如:java.util.Collections??????? java.lang.Math 等

          第四條:避免創(chuàng)造重復(fù)的對(duì)象
          特別是這樣的代碼不要寫: String str = new String("a string");
          因?yàn)檫@樣每次執(zhí)行的時(shí)候都創(chuàng)建了一個(gè)"a string"對(duì)象。
          可以寫成這樣:String str = "a string?";
          另外順便說(shuō)一句,這個(gè)時(shí)候你再次定義String? str2 = "a string";會(huì)復(fù)用上邊的字符串.

          第五條:在有些情況下手動(dòng)消除對(duì)象的引用
          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);
          ????????}

          ????}

          }
          如果這個(gè)Stack先大量增長(zhǎng),然后收縮,然后在比較小的范圍內(nèi)使用,必定造成大量的不可回收的對(duì)象,造成內(nèi)存泄漏.。
          解決辦法:改造一下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) 評(píng)論(0)  編輯  收藏 所屬分類: jdk相關(guān)

          主站蜘蛛池模板: 沁源县| 弋阳县| 若羌县| 澎湖县| 靖边县| 金山区| 商南县| 溧水县| 介休市| 灵宝市| 富源县| 和静县| 神木县| 石屏县| 翁源县| 封丘县| 上林县| 韩城市| 沙河市| 高淳县| 广宗县| 通江县| 微山县| 九台市| 康平县| 北辰区| 华池县| 宁明县| 长丰县| 子长县| 丹阳市| 民乐县| 苍梧县| 丁青县| 双城市| 灵璧县| 河南省| 攀枝花市| 淳安县| 海淀区| 鸡西市|