考虑一个叫Dog 的类:
**1. **即使我们没有显然的叫构造器是一个静态(static)方法,它本身就是个静态方法。所以当第一次去创建Dog 类型对象时,或者访问该类static 方法或者属性时,Java 解释器必须定位Dog.class 文件,这个要从classpath 去查找。
**2. **当Dog.class 加载后(Class对象创建后),该类的静态初始化器初始化静态属性。 因此static初始化在整个过程中仅仅初始化一次(不管有多少个该类的对象创建),即创建Dog类的Class对象时。
需要注意的是,java中的静态代码块(static {})与其他静态初始化相同,仅初始化一次:当第一次创建该类对象时或者访问该类静态属性或者方法时。
3. 当执行 new Dog( )时, JVM为一个 Dog 对象在堆空间上分配足够的空间 。
4. 当内存分配完成时,各属性将获得各自类型的默认值: 数值类型为0,boolean为false,char 为空, 其他对象引用为 null.
**5. **接下来执行属性声明时显式给出的初始化方式。
**6. **Constructor(构造方法)执行。
_ 若有非静态代码块,在构造器之前将执行非静态代码块的内容,创造每个实例执行一次。_