1.在JAVA中参数总是以by value方式传递而不是by reference
2.接口优先与抽象类
接口用于定义类型,如需提供部分实现选用 abstract class
可以为每一个接口提供一个抽象类
3.复合优先与继承
4.使用 static, final 和 private, 使类和成员的可访问能力最小化
对不变的data和object reference使用 final
5.改写 equals() 时需遵循的原则
首先使用 == 检查是否指向同一个引用(object reference)
优先考虑使用getClass(),只有在想比较derived class 和 base class 再使用 instanceof
如果 base class 实现了 equals(),应该调用super.equals()
public boolean equals(Object that) {
if (that == this) {
return true;
}
if (that != null && getClass() == that.getClass()) {
User thatUser = (User) that;
if (thatUser.getUsername().equals(this.username) && thatUser.getId().equals(this.id)) {
return true;
}
}
return false;
}
6.改写 equals() 时总是要改写 hashCode
private static final int INITIAL_HASH = 7;
private static final int MULTIPLIER = 31;
public int hashCode() {
int hash = INITIAL_HASH;
hash = MULTIPLIER * hash + id.hashCode();
hash = MULTIPLIER * hash + name.hashCode();
return hash;
}
7.总是要改写 toString()
8.谨慎的实现 Serializable
实现 Serializable 不是加上 implements Serializable 就完了
为继承而设计的类,很少实现 Serializable
9.谨慎的实现 clone
10.优先使用 Array, 然后再考虑 List, Set, Map
11.优先使用 for 遍历集合, 因为 for 比 Enumeration 和 Iterator 更快。
for (int i = 0, n = array.length; i < n; i++) {
}
for (Object object : set) {
}
12.使用基本类型(int, boolean..),可以使代码更快
13.如果其他类型更合适,尽量避免使用 String
14.如果进行字符串拼接,使用 StringBuilder或StringBuffer, 而不是 String
15.如果要求精确计算,避免使用 float 和 double
16.将局部变量作用域最小化,在第一次使用它的地方声明
17.不要从 try 区段中返回
因为如果存在 finally ,会在运行 finally 之后才返回,值可能会被改变
18.可以考虑用 class 代替 enum
19.自己产生表id(唯一标识符,主键),而不是通过数据库自动生成
唯一标识符采用无意义的代理键(如1000),而不是具有业务概念的唯一自然键(如身份证号码)
可以采用GUID,如果不是很必要采用类型为 int 的id比GUID效率更高
20.代码规范很重要
21.单元测试很重要
22.使用版本控制,即使一个人开发也一样