上面的5个步骤中的第3步就是指递归地调用该类所扩展的所有父类的构造方法,一个Java类(除Object类外)至少有一个父类(Object),这个规则既是强制的,也是隐式的。你可能已经注意到在创建一个Java类的时候,并没有显式地声明扩展(extends)一个Object父类。实际上,在 Java程序设计中,任何一个Java类都直接或间接的是Object类的子类。例如下面的代码:
public class A { … } 这个声明等同于下面的声明: public class A extends java.lang.Object { … }
另外,不要对一个对象进行多次初始化,这同样会带来较大的内存开销,降低系统性能,如:
public class A { private Hashtable table = new Hashtable (); public A() { // 将Hashtable对象table初始化了两次 table = new Hashtable(); } }
正确的方式为:
public class B { private Hashtable table = new Hashtable (); public B() { } }
… … import java.lang.ref.SoftReference; … A a = new A(); … // 使用 a … // 使用完了a,将它设置为soft 引用类型,并且释放强引用; SoftReference sr = new SoftReference(a); a = null; … // 下次使用时 if (sr!=null) { a = sr.get(); } else{ // GC由于内存资源不足,可能系统已回收了a的软引用, // 因此需要重新装载。 a = new A(); sr=new SoftReference(a); } … …
… … import java.lang.ref.WeakReference; … A a = new A(); … // 使用 a … // 使用完了a,将它设置为weak 引用类型,并且释放强引用; WeakReference wr = new WeakReference (a); a = null; … // 下次使用时 if (wr!=null) { a = wr.get(); } else{ a = new A(); wr = new WeakReference (a); } … …