1. 创建类的实例(new 的方式). 访问某个类或接口的静态变量, 或者对该静态变量赋值, 调用类的静态方法
2. 反射的方式
3. 当初始化一个类的时候, 如果发现其父类还没有进行初始化, 则需先触发其父类的初始化.
4.Java 虚拟机启动时被标明为启动类的类, 直接使用 java.exe 命令来运行某个主类(包含 main 方法的那个类)
5. 当使用 JDK 1.7 的动态语言支持时, 如果一个 java.lang.invoke.MethodHandle 实例最后的解析结果 REF_getStatic,REF_putStatic,REF_invokeStatic 的方法句柄, 并且这个方法句柄所对应的类没有进行过初始化, 则需先触发其初始化.
Java 类的加载是动态的, 它并不会一次性将所有类全部加载后再运行, 而是保证程序运行的基础类 (像是基类) 完全加载到 jvm 中, 至于其他类, 则在需要的时候才加载. 这当然就是为了节省内存开销.
来源: https://www.cnblogs.com/linliquan/p/11257716.html