二十七、使用零長度數(shù)組代替Null作為返回值
原因:返回Null會造成使用者每次使用的時候都要作一次判斷,但有人會說返回一個零長度數(shù)組會產(chǎn)生new的開銷,不如Null性能好。這個不是一定的,因為我們可以這樣來作
private final static Cheese[]? NULL_CHESE_ARRAY = new Cheese[0];
每次需要的時候返回這個數(shù)組就好了。
二十八、為所有的導(dǎo)出Api元素編寫文檔注釋
二十九、使一個局部變量的作用域最小化,最好的辦法使在第一次使用的時候聲明
1,幾乎每一個局部變量的聲明都應(yīng)該包含一個初始化表達(dá)式,如果你還沒有足夠的信息來初始化那就推遲聲明。
2,for循環(huán)優(yōu)先于while循環(huán),見下邊的例子
//????????for循環(huán)

????????for(Iterator?ie?=?list.iterator();ie.hasNext())
{
????????????doSomething(ie.next());
????????}
//????????while循環(huán)
????????
????????Iterator?ie1?=?list1.iterator();

????????while(ie1.hasNext())
{
????????????doSomething(ie1.next());
????????}
????????Iterator?ie2?=?list2.iterator();

????????while(ie1.hasNext())
{?????//bug
????????????doSomething(ie2.next());
????????}這個問題源于復(fù)制粘貼,在編碼的過程中復(fù)制粘貼幾乎是不可避免的,使用for循環(huán)當(dāng)你出錯的時候可以在編譯器發(fā)生錯誤,而使用while則不會發(fā)現(xiàn)。盡早發(fā)現(xiàn)錯誤總是好的。
三十、了解和使用庫(產(chǎn)生隨機(jī)數(shù))
詳細(xì):如果你希望產(chǎn)生一個位于0-某個上界的隨機(jī)數(shù),大多數(shù)的人的寫法如下
static?Random?rnd?=?new?Random();

????static?int?random(int?n)
{
????????return?Math.abs(rnd.nextInt())%n;
????}這個方法存在三個缺點:
缺點一:
如果n是一個比較小的2的乘方 那么經(jīng)過一段相當(dāng)短的周期后它產(chǎn)生的隨即數(shù)序列將會重復(fù)
缺點二:
如果n不是2的乘方,那么平均起來某些數(shù)比另外一些數(shù)出現(xiàn)的更為頻繁,如果n比較大則這個問題更加顯著如果產(chǎn)生100萬范圍內(nèi)的隨機(jī)數(shù),你會發(fā)現(xiàn)數(shù)字幾乎全部在0-666 666 ,前2/3的數(shù)字
缺點三:
在有些情況下會災(zāi)難性失敗,返回一個落在范圍之外的數(shù)字。原因是使用了Math.abs來得到一個非負(fù)數(shù)。
如果nextInt()返回 Integer.MIN_VALUE,那么abs后也會返回Integer.MIN_VALUE ,假設(shè)n不是2的乘方,那么取模操作符%將返回一個負(fù)數(shù),這幾乎肯定造成你的程序失敗,而且這個失敗很難重現(xiàn)。
為了編寫一個避免上邊三個缺點的random,你必須了解線性同于偽隨機(jī)發(fā)生器、數(shù)論、和2的求補(bǔ)運算知識。不過Jdk已經(jīng)實現(xiàn)了一個現(xiàn)成的可以使用,那就是Random.nextInt(int)

文章來源:http://www.aygfsteel.com/dreamstone/archive/2007/02/11/99200.html
原因:返回Null會造成使用者每次使用的時候都要作一次判斷,但有人會說返回一個零長度數(shù)組會產(chǎn)生new的開銷,不如Null性能好。這個不是一定的,因為我們可以這樣來作
private final static Cheese[]? NULL_CHESE_ARRAY = new Cheese[0];
每次需要的時候返回這個數(shù)組就好了。
二十八、為所有的導(dǎo)出Api元素編寫文檔注釋
二十九、使一個局部變量的作用域最小化,最好的辦法使在第一次使用的時候聲明
1,幾乎每一個局部變量的聲明都應(yīng)該包含一個初始化表達(dá)式,如果你還沒有足夠的信息來初始化那就推遲聲明。
2,for循環(huán)優(yōu)先于while循環(huán),見下邊的例子




















三十、了解和使用庫(產(chǎn)生隨機(jī)數(shù))
詳細(xì):如果你希望產(chǎn)生一個位于0-某個上界的隨機(jī)數(shù),大多數(shù)的人的寫法如下






缺點一:
如果n是一個比較小的2的乘方 那么經(jīng)過一段相當(dāng)短的周期后它產(chǎn)生的隨即數(shù)序列將會重復(fù)
缺點二:
如果n不是2的乘方,那么平均起來某些數(shù)比另外一些數(shù)出現(xiàn)的更為頻繁,如果n比較大則這個問題更加顯著如果產(chǎn)生100萬范圍內(nèi)的隨機(jī)數(shù),你會發(fā)現(xiàn)數(shù)字幾乎全部在0-666 666 ,前2/3的數(shù)字
缺點三:
在有些情況下會災(zāi)難性失敗,返回一個落在范圍之外的數(shù)字。原因是使用了Math.abs來得到一個非負(fù)數(shù)。
如果nextInt()返回 Integer.MIN_VALUE,那么abs后也會返回Integer.MIN_VALUE ,假設(shè)n不是2的乘方,那么取模操作符%將返回一個負(fù)數(shù),這幾乎肯定造成你的程序失敗,而且這個失敗很難重現(xiàn)。
為了編寫一個避免上邊三個缺點的random,你必須了解線性同于偽隨機(jī)發(fā)生器、數(shù)論、和2的求補(bǔ)運算知識。不過Jdk已經(jīng)實現(xiàn)了一個現(xiàn)成的可以使用,那就是Random.nextInt(int)
dreamstone 2007-02-11 01:03 發(fā)表評論
文章來源:http://www.aygfsteel.com/dreamstone/archive/2007/02/11/99200.html