一、
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、
手动优化你的代码,特别是执行的顺序