比如Dog.java
Step1.当 new Dog() 或者 Dog.someStaticMehtod() 或者 Dog.someStaticVariable时java 解释器查找类路径,加载 Dog.class
Step2.Dog.class被加载了,此时创建出了一个 Dog.class对象。
此时Dog的所有静态获得都会别初始化(static 块,static 变量).
要注意,静态初始化只在Class对象首次加载时进行
Step3.如果Step1中是new Dog(),
这时候会有如下情况
- 首先,在内存中分配一块内存空间
- 其次,将这块内存空间清零(比如,int类型为0,引用类型为null)
- 再次,执行所有成员变量(non-static)的初始化 最后,执行构造器(会从父类构造器开始调用,此处不详细探讨)