构造函数确保初始化
当实例化一个对象时,所要进行了的工作,如:
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的构造方法。