DANCE WITH JAVA

          開發出高質量的系統

          常用鏈接

          統計

          積分與排名

          好友之家

          最新評論

          Effective Java 27-30

          二十七、使用零長度數組代替Null作為返回值
          原因:返回Null會造成使用者每次使用的時候都要作一次判斷,但有人會說返回一個零長度數組會產生new的開銷,不如Null性能好。這個不是一定的,因為我們可以這樣來作
          private final static Cheese[]? NULL_CHESE_ARRAY = new Cheese[0];
          每次需要的時候返回這個數組就好了。

          二十八、為所有的導出Api元素編寫文檔注釋
          二十九、使一個局部變量的作用域最小化,最好的辦法使在第一次使用的時候聲明
          1,幾乎每一個局部變量的聲明都應該包含一個初始化表達式,如果你還沒有足夠的信息來初始化那就推遲聲明。
          2,for循環優先于while循環,見下邊的例子
          //????????for循環
          ????????for(Iterator?ie?=?list.iterator();ie.hasNext()){
          ????????????doSomething(ie.next());
          ????????}

          //????????while循環
          ????????
          ????????Iterator?ie1?
          =?list1.iterator();
          ????????
          while(ie1.hasNext()){
          ????????????doSomething(ie1.next());
          ????????}

          ????????Iterator?ie2?
          =?list2.iterator();
          ????????
          while(ie1.hasNext()){?????//bug
          ????????????doSomething(ie2.next());
          ????????}
          這個問題源于復制粘貼,在編碼的過程中復制粘貼幾乎是不可避免的,使用for循環當你出錯的時候可以在編譯器發生錯誤,而使用while則不會發現。盡早發現錯誤總是好的。
          三十、了解和使用庫(產生隨機數)
          詳細:如果你希望產生一個位于0-某個上界的隨機數,大多數的人的寫法如下
          static?Random?rnd?=?new?Random();
          ????
          static?int?random(int?n){
          ????????
          return?Math.abs(rnd.nextInt())%n;
          ????}
          這個方法存在三個缺點:
          缺點一:
          如果n是一個比較小的2的乘方 那么經過一段相當短的周期后它產生的隨即數序列將會重復
          缺點二:
          如果n不是2的乘方,那么平均起來某些數比另外一些數出現的更為頻繁,如果n比較大則這個問題更加顯著如果產生100萬范圍內的隨機數,你會發現數字幾乎全部在0-666 666 ,前2/3的數字
          缺點三:
          在有些情況下會災難性失敗,返回一個落在范圍之外的數字。原因是使用了Math.abs來得到一個非負數。
          如果nextInt()返回 Integer.MIN_VALUE,那么abs后也會返回Integer.MIN_VALUE ,假設n不是2的乘方,那么取模操作符%將返回一個負數,這幾乎肯定造成你的程序失敗,而且這個失敗很難重現。

          為了編寫一個避免上邊三個缺點的random,你必須了解線性同于偽隨機發生器、數論、和2的求補運算知識。不過Jdk已經實現了一個現成的可以使用,那就是Random.nextInt(int)

          posted on 2007-02-11 01:03 dreamstone 閱讀(1494) 評論(0)  編輯  收藏 所屬分類: jdk相關

          主站蜘蛛池模板: 景德镇市| 岳池县| 抚顺县| 改则县| 微山县| 建湖县| 板桥市| 安泽县| 福鼎市| 镇原县| 南郑县| 子洲县| 攀枝花市| 二手房| 福海县| 宾川县| 肇庆市| 渝北区| 台州市| 辽阳市| 临夏县| 德州市| 阿拉善左旗| 响水县| 彰化市| 桂阳县| 横峰县| 拉萨市| 平果县| 卓资县| 清远市| 西吉县| 桐庐县| 济源市| 铜川市| 涿州市| 安达市| 乌拉特中旗| 孟州市| 阳朔县| 竹山县|