构造函数确保初始化
当实例化一个对象时,所要进行了的工作,如:
a.当调用到Dog类的成员或方法时,解释器通过class路径搜寻Dog.class类文件 b.加载这个类文件,初始化static成员,静态初始化只在Class类对象首次加载的时候执行一次 c.当用new Dog()创建对象的时候,将在堆上为Dog对象分配足够的内存 d.Dog对象中的所有基本类型数据都设置成了缺省值 e.执行所有字段初始化动作 f.执行构造器.
初始化顺序: 先初始化"静态"对象,再初始化“非静态”对象,当静态对象所在的类没有加载时,这个静态对象不会被初始化,但是被加载后,静态对象只被初始化一次。当一个类被加载时,所定义的实例对象无论散布于任何方法之间,它仍旧在任何方法(包括构造方法)调用之前都会被初始化。例如:
public class Test {
/** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub B b = new B(); }
}class A{ A(int mark) { System.out.println("A("+mark+")"); }}class B{ B() { System.out.println("B"); } A a1 = new A(1); A a2 = new A(2); }
输出结果为:A(1)A(2)B即使B()构造在a1实例对象之前,结果也是同样,因为在Test中new B()时,在B这个类中首先初始化A所有的实例对象,再调用B的构造方法。