Java种的初始化顺序

Java类的初始化顺序
今天看了类的初始化顺序,于是动手测试,发现结果会有变化......
package com.xushiyun;

/**
 * 测试 
 * 
 * */
class A{
	static{
		System.out.println("当前执行位置"+"静态代码块AAAA");
	}
	{
		System.out.println("当前执行位置"+"普通代码块AAAA");
	}
	A(){
		System.err.println("当前执行位置"+this.getClass().getName()+"默认构造器");
	}
}


class B{
	static{
		System.out.println("当前执行位置"+"静态代码块BBBB");
	}
	{
		System.out.println("当前执行位置"+"普通代码块BBBB");
	}
	B(){
		System.err.println("当前执行位置"+this.getClass().getName()+"默认构造器");
	}
}


class C{
	static{
		System.out.println("当前执行位置"+"静态代码块CCCC");
	}
	{
		System.out.println("当前执行位置"+"普通代码块CCCC");
	}
	C(){
		System.err.println("当前执行位置"+this.getClass().getName()+"默认构造器");
	}
}


class D{
	static{
		System.out.println("当前执行位置"+"静态代码块DDDD");
	}
	{
		System.out.println("当前执行位置"+"普通代码块DDDD");
	}
	D(){
		System.err.println("当前执行位置"+this.getClass().getName()+"默认构造器");
	}
}


class Bird{
	static{
		System.out.println("当前执行位置"+"Bird静态代码块");		
	};
	{
		System.out.println("当前执行位置"+"Bird普通代码块");
	}
	public Bird() {
		System.err.println("当前执行位置"+this.getClass().getName()+"默认构造器");
		
	}
};


class Person{
		
	D d = new D();
	static Bird bird = new Bird();
	static {
		System.out.println("当前执行位置"+"Person静态代码块");
		new A();
		System.out.println("当前执行位置"+"Person静态代码块-------结束");
	};
	{
		System.out.println("当前执行位置"+"Person普通代码块");
		new B();
		System.out.println("当前执行位置"+"Person普通代码块---------结束");
	}
	Person(){
		System.err.println("当前执行位置"+this.getClass().getName()+"默认构造器");
		new C();
		System.err.println("当前执行位置"+this.getClass().getName()+"默认构造器----结束");
	}
}
public class JavaTest {


	public static void main(String[] args) {
       
        new Person();

	}

}