初始化数据域调用构造器的初始步骤
所有数据域被初始化为默认值
按照在类中声明的顺序,依次执行所有域初始化语句和初始化块
如果构造器第一行调用了第二个构造器,则执行第二个构造器的主体
执行这个构造器的主体
注:
1. 在初始化中,静态域优先于非静态域
2. 静态域在第一次加载类时执行初始化(实例化了多个对象,但静态域只初始化一次)
3. 如果在类中调用了构造函数,只会初始化类中的所有非静态块
4. 初始化默认值,数值类型为0,布尔类型为false,对象引用为null
例:
下面是一道题,请输出题目的结果
public class Test1 {
public static int k = 0;
public static Test1 t1 = new Test1("t1");
public static Test1 t2 = new Test1("t2");
public static int i = print("i");
public static int n = 99;
public int j = print("j");
{
print("构造块");
}
static{
print("静态块");
}
public Test1(String str){
System.out.print("Test1:");
System.out.println((++k)+":"+str+" i="+i+" n="+n);
++i;++n;
}
public static int print(String str){
System.out.print("print:");
System.out.println((++k)+":"+str+" i="+i+" n="+n);
++n;
return ++i;
}
public static void main(String[] args) {
Test1 t = new Test1("init");
}
}
下面是运行结果:
结果分析: