?
一、 General Techniques
1、? 引數以 by value 方式而非 by reference 方式傳遞
2、? 對于不變的 data 和 object reference 使用 final ,final 僅僅令 object reference 自身成為不變量,但并不限制它所指向對象的改變
3、? 缺省情況下,所有 non-static 都可以被覆寫,不然 , 則用 final 防止覆寫
4、? vector 容器包含的是對象,與 arrays 要區別,但我認為 Vector 的功能實際上有些像跟 Array List 差不多,只是 vector 現在不經常使用
5、? 多態優于 instanceof ,只有在不得已的情況下使用
“如果你根據對象的型別來觸發行為,那就改給自己一個耳光”
例如,當你必須從一個 base type 做向下轉型為 derived type 的時候,必須使用它
….
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
、一旦不需要對象的引用,就將它設為
null
;
??????
盡管有
GC,
你還是要關注的你的代碼如何運用內存;
????????
二、?
對象與相等性
7
、區分
reference type
和
primitive type
,理解他們的差異,你會在運用他們時候做出明智的
選擇;
???????? Boolean(boolean)
???????? Character(char)
Byte(byte)
Integer(int)
Float(float)
Long(long)
Short(short)
Double(double)
基本型別相等,只要是值相等就可以拉,不管是不是同一類型;而引用類型必須則按照引用的比較方式來比較,譬如
equals();
8
、
java.lang.object
提供的
equals()
方法很多時候不是你想要的,你需要自己寫一些比較的方法
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
的異常覆蓋掉,在這樣的情況下,我們要專門把異常保存下來,如用一個
vector
保存;
不要忽略任何一個異常,因為異常一旦出現,拋出異常的那個線程將會終止;
將一個異常加入到
throw
子句,會影響到調用它的所有函數
使用
finally
防止資源泄露,譬如在連接數據庫的時候在
finally
中關閉連接;
不要從
try
字段中返回;
不要用
try
、
catch
用于流程控制
;
不要每逢出錯的使用
try
和
catch;
不要在構造函數中拋出異常;
拋出異常前,請將對象置為有效狀態;
四、?
性能
1、??
先把焦點放在設計,數據機構和算法方面
2、??
如果進行字符串的拼接,用
String Buffer
比
String
快許多倍
3、??
在面向對象中,對象的創建是昂貴的,因此需要將對象的創建成本降到最低,減少一些沒有必要的對象,在非必要的時候,別產生你的對象
4、??
將同步減少到最低,增加
stack
的使用
5、??
使用基本型別代碼會更快
6、??
在使用
vector
時候,用
get()
來獲取對象,而不是
Interator
7、??
優先使用
array,
再考慮
ArrayList
與
Vector
,如果不需要
vector
的同步特性,考慮使用
ArrayList
8、??
盡可能的重復使用對象,這比重新創建對象更有效
9、??
使用緩式評估,延遲計算,不必要的計算永遠都不要計算
10、
手動優化你的代碼,特別是執行的順序