java调用构造器的时候是按什么顺序执行的呢?
1、java先将静态域初始化为默认值,接下来根据对静态域进行赋值(按照在类中的声明出现的次序)
2、对实例域初始化为默认值,再对实例域进行赋值(按照在类中的声明出现的次序)
3、如果构造器第一行调用了第二个构造器。执行第二个构造器的主体。
4、执行这个构造器的主体
看一个例子
package test;
public class initial{
private static int nextId = getValue();
private static int id = 4;
private String name="lake";
private double salary;
public static int getValue() {
return ++id;
}
//obejct initialization block初始化块
{
//id=nextId;
nextId++;
System.out.println("block初始化块。。。。");
}
public static void main(String[] args) {
initial a = new initial();
System.out.println(nextId);
}
}
上面代码的执行顺序是先将静态域初始化为默认值(此时nextId为0),再对其赋值(此时nextId为1),再执行初始化块,此时nextId为2