会被加载和初始化的情况:
1.虚拟机启动时,会先初始化main方法所在的类;
2.new一个类的对象,创建类的实例的时候;
3.利用反射来强制创建某个类或接口对应的java.lang.Class对象;
4.初始化某个类的子类,子类的父类会先被初始化;
5.调用某个类的类方法(静态方法);???
6.访问某个类变量或为该变量赋值。
7.直接使用java.exe命令运行某个主类,主类先被初始化。
注:static修饰的属性和方法在类加载的时候初始化,普通的属性和方法在创建类实例对象的时候才会被初始化。
不被初始化的情况:
1.通过子类引用父类的静态字段,子类不会被初始化。 ?
2.调用类的常量;即访问常量(常量在link阶段就被放入常量池中了);
3.通过数组定义类引用,不会导致类的初始化;
TestClass[] testClassArr = new TestClass[5]; \\ 不会导致TestClass类被初始化
注:
(1)本篇博客转载自:https://blog.csdn.net/guoqingshuang/article/details/87970688;https://www.cnblogs.com/ryokai/p/13607643.html;https://www.cnblogs.com/codezpc/p/12703440.html(这篇博客的最后一条存疑啦);
(2)类装载、连接、初始化的内容,目前自己不能完全理解,留待后续深化!!!