圣思园张龙老师关于类加载器的一个例子。
这个打印的是1,1
这个打印的是1,0
造成以上的区别的原因就在于:类加载的时候先准备(静态变量赋默认值),然后初始化(赋值或者静态代码块),实例化。
类的初始化只有在以下六种情况(主动使用)才会发生:
- 创建类的实例,并且不影响子类的初始化
- 访问某个类或者接口的静态变量或者赋值
- 访问类的静态方法
- 反射,比如Class.forName("xxxxxxxxxxxxx")
- 初始化一个类的子类
- 启动类
类的主动使用:只有访问当前类或者接口的静态变量或者方法时,才认为是主动使用。