java中初始化顺序

/**
 * 1、当使用新建对象实例或者调用静态成员变量或者方法时,初始化静态变量
 * 2、静态变量在初始化时在前面的先初始化,静态块和静态变量相同对待(在初始化过程中,有新建对象实例的时候,暂时停止后面的静态变量初始化)
 * 3、静态变量没有初始化时,使用默认的初始值(如int为0)
 * 4、新建对象实例,对非静态的成员变量进行赋值,构造块同样如此,排在前面的先初始化
 * 5、成员变量没有初始化时,使用默认的初始值(如int为0)
 */
public class TestInit {
	private int i = print("成员变量赋值");
	{
		print("构造块");
	}
	private static int j = print("静态变量赋值");
	static {
		print("静态块");
	}
	private static TestInit ti1 = new TestInit("ti1");
	private static int k = 0;
	public TestInit(String str) {
		System.out.println("k:" + ++k + "	" + str + "	i:" + i++);
	}
	private static TestInit ti2 = new TestInit("ti2");
	
	private static int print(String str) {
		System.out.println("k:" + ++k + "	" + str + "	j:" + j++);
		return j;
	}
	
	public static void main(String[] args) {
		new TestInit("init");
	}

}

结果:

k:1	静态变量赋值	j:0
k:2	静态块	j:1
k:3	成员变量赋值	j:2
k:4	构造块	j:3
k:5	ti1	i:3
k:1	成员变量赋值	j:4
k:2	构造块	j:5
k:3	ti2	i:5
k:4	成员变量赋值	j:6
k:5	构造块	j:7
k:6	init	i:7


你可能感兴趣的:(java中初始化顺序)