当创建任何 Java 对象时,程序总会先依次调用每个父类非静态初始化块、父类构造器(总是从 Object 开始,因为Java 程序里所有类的最终父类都是 java.lang.Object 类)执行初始化,最后才调用本类的非静态初始化块、构造器执行初始化。
当调用某个类的构造器来创建Java 对象时,系统总会先调用父类的非静态初始化块进行初始化。这个调用是隐式执行的,而且父类的静态初始化块总是会被执行。接着会调用父类的一个或多个构造器执行初始化,这个调用既可以是通过 super 进行显式调用,也可以是隐式调用。
当所有父类的非静态初始化块、构造器依次调用完成后,系统调用本类的非静态初始化块、构造器执行初始化,最后返回本类的实例。 下面程序演示了创建Java 对象时的初始化过程。
class Creature
{
{
System.out.println("Creature 的非静态初始化块");
}
//下面定义两个构造器
public Creature()
{
System.out.println("Creature 无参数的构造器");
}
public Creature(String name)
{
//使用 this 调用另一个重载、无参数的构造器
this();
System.out.println("Creature 带有 name参数的构造器,name参数:"
+ name);
}
}
class Animal extends Creature<