代码规范
第一条:考虑用静态工厂方法代替构造器
原因:静态工厂方法第一大优势它们有名称,第二大优势,不必在每次调用时都创建一个新对象,
第三优势可以返回原返回类型的任何子类型的对象。
(冷不丁的想用枚举来做静态工厂实现)
第四优势在创建参数化类型实例的时候,他们使得代码变得更加简洁。
缺点当然也有:一:类如果不含共有或者受保护的构造器就不能被子类化,二:与其他静态方法没有区别。
遵守命名习惯可以弥补这一劣势,比如newtype创建新对象,gettype获取对象
所以,一般一个静态工厂方法需要有详细的注释,遵守标准的命名,
如使用getInstance、valueOf、newInstance等方法名;
第二条:遇到多个构造器参数时要考虑用构造器
第一中构造就是常见的重叠构造器,一个构造器中this(xxx)调用同名构造器,但是参数过多就容易懵了,
可以使用无参模式,build生成不可变对象。
第三条:用私有构造器或枚举类型强化Singleton属性(单例模式)
第四条:通过私有构造器强化不可实例化的能力
第五条:避免创建不必要的对象,重用不可变对象
小心自动拆装箱,要优先使用基本类型而不是装箱基本类型,要当心无意识的自动装箱。
第6条:消除过期对象的引用:下面例子引用了arraylist的remove方法,
如果没有将元素置为null的话,就会随着垃圾回收器活动的增加,或者由于内存占用不断增加,程序性能降低会逐渐表现出来。
public E remove(int index) {
rangeCheck(index);
modCount++;
E oldValue = elementData(index);
int numMoved = size - index - 1;
if (numMoved > 0)
System.arraycopy(elementData, index+1, elementData, index,
numMoved);
elementData[--size] = null; // clear to let GC do its work
return oldValue;
}
内存泄漏的另外一个常见来源是缓存,一旦你把对象引用放到缓存中,
它就很容易被遗忘掉,从而使得它不再有用之后很长时间都保留在缓存之中
如果你需要这样的缓存那么可以使用这个WeakHashMap,当缓存过期之后就会自动删除。
// 初始化3个“弱键”
String w1 = new String("one");
String w2 = new String("two");
String w3 = new String("three");
// 新建WeakHashMap
Map wmap = new WeakHashMap();
// 添加键值对
wmap.put(w1, "w1");
wmap.put(w2, "w2");
wmap.put(w3, "w3");
// 打印出wmap
// ---- 测试 WeakHashMap 的自动回收特性 ----
// 将w1设置null。
// 这意味着“弱键”w1再没有被其它对象引用,调用gc时会回收WeakHashMap中与“w1”对应的键值对
w1 = null;
// 内存回收。这里,会回收WeakHashMap中与“w1”对应的键值对
System.gc();
System.out.println(wmap.toString());
System.out.println(wmap.size());
==========================================================================
{three=w3, two=w2} 2
原文:https://www.cnblogs.com/q1359720840/p/10500394.html