?
一、 General Techniques
1、? 引數(shù)以 by value 方式而非 by reference 方式傳遞
2、? 對于不變的 data 和 object reference 使用 final ,final 僅僅令 object reference 自身成為不變量,但并不限制它所指向?qū)ο蟮母淖?/span>
3、? 缺省情況下,所有 non-static 都可以被覆寫,不然 , 則用 final 防止覆寫
4、? vector 容器包含的是對象,與 arrays 要區(qū)別,但我認(rèn)為 Vector 的功能實(shí)際上有些像跟 Array List 差不多,只是 vector 現(xiàn)在不經(jīng)常使用
5、? 多態(tài)優(yōu)于 instanceof ,只有在不得已的情況下使用
“如果你根據(jù)對象的型別來觸發(fā)行為,那就改給自己一個(gè)耳光”
例如,當(dāng)你必須從一個(gè) base type 做向下轉(zhuǎn)型為 derived type 的時(shí)候,必須使用它
….
Vector shapeVector = new Vector(10);
shapeVector.add(new Triangle());
shapeVector.add(new Triangle());
shapeVector.add(new Circle());
??? //...
??? //Assume many Triangles and Circles are added and removed
??? //...
??? int size = shapeVector.size();
??? for (int i=0; i<size; i++)
??? {
????? Object o = shapeVector.get(i);
????? if (o instanceof Triangle)
????? {
??????? if (((Triangle)o).isRightTriangle())
??????? {
????????? //...
??????? }
????? }
????? else if (o instanceof Circle)
????? {
??????? double rad = ((Circle)o).radius();
??????? //...
????? }
}
????????
6
、一旦不需要對象的引用,就將它設(shè)為
null
;
??????
盡管有
GC,
你還是要關(guān)注的你的代碼如何運(yùn)用內(nèi)存;
????????
二、?
對象與相等性
7
、區(qū)分
reference type
和
primitive type
,理解他們的差異,你會(huì)在運(yùn)用他們時(shí)候做出明智的
選擇;
???????? Boolean(boolean)
???????? Character(char)
Byte(byte)
Integer(int)
Float(float)
Long(long)
Short(short)
Double(double)
基本型別相等,只要是值相等就可以拉,不管是不是同一類型;而引用類型必須則按照引用的比較方式來比較,譬如
equals();
8
、
java.lang.object
提供的
equals()
方法很多時(shí)候不是你想要的,你需要自己寫一些比較的方法
public boolean equals(Object obj)
? {
??? if (this == obj)
????? return true;
??? if (obj != null && getClass() == obj.getClass())
??? {
????? Golfball gb = (Golfball)obj;? //Classes are equal, downcast.
????? if (brand.equals(gb.brand()) &&? //Compare attributes.
????????? make.equals(gb.make()) &&
????????? compression == gb.compression())
????? {
??????? return true;
????? }
??? }
??? return false;
? }
三、?
java
異常
1、??
try,cacth,finally
不要將
catch
的異常覆蓋掉,在這樣的情況下,我們要專門把異常保存下來,如用一個(gè)
vector
保存;
不要忽略任何一個(gè)異常,因?yàn)楫惓R坏┏霈F(xiàn),拋出異常的那個(gè)線程將會(huì)終止;
將一個(gè)異常加入到
throw
子句,會(huì)影響到調(diào)用它的所有函數(shù)
使用
finally
防止資源泄露,譬如在連接數(shù)據(jù)庫的時(shí)候在
finally
中關(guān)閉連接;
不要從
try
字段中返回;
不要用
try
、
catch
用于流程控制
;
不要每逢出錯(cuò)的使用
try
和
catch;
不要在構(gòu)造函數(shù)中拋出異常;
拋出異常前,請將對象置為有效狀態(tài);
四、?
性能
1、??
先把焦點(diǎn)放在設(shè)計(jì),數(shù)據(jù)機(jī)構(gòu)和算法方面
2、??
如果進(jìn)行字符串的拼接,用
String Buffer
比
String
快許多倍
3、??
在面向?qū)ο笾校瑢ο蟮膭?chuàng)建是昂貴的,因此需要將對象的創(chuàng)建成本降到最低,減少一些沒有必要的對象,在非必要的時(shí)候,別產(chǎn)生你的對象
4、??
將同步減少到最低,增加
stack
的使用
5、??
使用基本型別代碼會(huì)更快
6、??
在使用
vector
時(shí)候,用
get()
來獲取對象,而不是
Interator
7、??
優(yōu)先使用
array,
再考慮
ArrayList
與
Vector
,如果不需要
vector
的同步特性,考慮使用
ArrayList
8、??
盡可能的重復(fù)使用對象,這比重新創(chuàng)建對象更有效
9、??
使用緩式評估,延遲計(jì)算,不必要的計(jì)算永遠(yuǎn)都不要計(jì)算
10、
手動(dòng)優(yōu)化你的代碼,特別是執(zhí)行的順序